Decimal Testcases, version 2.44
Copyright (c) IBM Corporation, 2009. All rights reserved. ©
 7 Apr 2009 
[previous  contents  next]

This section describes the testcases included in the testcase package
(dectest.zip), and their history.
The following groups cover the base arithmetic operations of the
specification:
Group
 Description

abs
 Tests the abs operation.

add
 Tests the add operation, including both positive and negative
numbers for the operands.

compare, comparesig
 Test the compare and comparesig operations.

divide
 Tests the divide operation.

divideint
 Tests the divideint operation.

fma
 Tests the fma (fused multiplyadd) operation.

max, maxmag
 Test the max and maxmag operations.

min, minmag
 Test the min and minmag operations.

minus
 Tests the minus operation.

multiply
 Tests the multiply operation.

quantize
 Tests the quantize operation.

reduce
 Tests the reduce operation (previously named
normalize).

remainder
 Tests the remainder operation.

remaindernear
 Tests the remaindernear (IEEE remainder) operation.

rescale
 Tests the rescale operation.

subtract
 Tests the subtract operation.

tointegral, tointegralx
 Test the roundtointegral operations.
 
The following groups cover the mathematical functions of the
specification:
Group
 Description

exp
 Tests the exp function.

ln
 Tests the ln function.

log10
 Tests the log10 function.

power, powersqrt
 Test the power operation.

squareroot
 Tests the squareroot function.
 
The following groups cover the logical and shifting functions of the
specification:
Group
 Description

and
 Tests the and (digitwise logical and) operation.

invert
 Tests the invert (digitwise logical invert) operation.

or
 Tests the or (digitwise logical or) operation.

rotate
 Tests the rotate (coefficient rotation) operation.

shift
 Tests the shift (coefficient shifts) operation.

xor
 Tests the xor (digitwise logical xor) operation.
 
The following groups cover miscellaneous functions of the
specification:
Group
 Description

class
 Tests the class (classification) operation.

comparetotal, comparetotmag
 Test the totalordering operations.

copy, copyabs, copynegate, copysign
 Test the quiet copy and signmanipulation operations.

logb
 Tests the logb (exponent extract) operation.

nextminus, nextplus, nexttoward
 Test the selectnextvalue operations.

samequantum
 Tests the samequantum operation.

scaleb
 Tests the scaleb (exponent manipulation) operation.
 
The following groups cover more general aspects of the operations:
Group
 Description

base
 Tests the base string conversions (toSci and toEng
operations), including strings which are not valid numbers.

inexact
 Tests edge cases for the inexact and rounded
conditions, using a selection of operations.

randoms
 4000 randomlygenerated tests, using
the add, compare, divide, divideint,
multiply, power, remainder, and subtract
operations.

rounding
 Tests the different rounding modes. Each rounding mode is
tested for each of the major operations.

trim
 Tests the trim operation.
 
Three testcase groups collect together a number of testcase groups
for each of the three main decimal encodings for decimal
arithmetic:^{[1]}
Group
 Description

decSingle
 Includes testcase groups for the ‘decimal32’ decimal data
type (7 digits, maximum exponent +96).
The groups included in decSingle all have names starting with
the letters ds, followed by a word corresponding to the
operations they test.

decDouble
 Includes testcase groups for the ‘decimal64’ decimal data
type (16 digits, maximum exponent +384).
The groups included in decDouble all have names starting with
the letters dd, followed by a word corresponding to the
operations they test.

decQuad
 Includes testcase groups for the ‘decimal128’ decimal data
type (34 digits, maximum exponent +6144).
The groups included in decQuad all have names starting with
the letters dq, followed by a word corresponding to the
operations they test.
 
Four testcase groups are designed for testing the boundary conditions
and encodings associated with the concrete representations
for decimal arithmetic and a further group includes random tests for
boundary conditions around 32 digits:
Group
 Description

clamp
 Tests clamped operations, independent of format.

dsEncode
 Tests for the ‘decimal32’ decimal data type (7 digits, maximum
exponent +96);
included in decSingle.

ddEncode
 Tests for the ‘decimal64’ decimal data type (16 digits, maximum
exponent +384);
included in decDouble.

dqEncode
 Tests for the ‘decimal128’ decimal data type (34 digits, maximum
exponent +6144);
included in decQuad.

randombound32
 2400 tests, as in the randoms group, with precisions 31
through 33 and maximum exponent +9999.
 
All the above groups appear with the name as shown above – in
these groups testcases are run with the extended directive
set to 1; these testcases are in the file
dectest.zip
A subset of these groups also appears with the name as shown above
with the suffix 0 – in these groups the extended
directive is set to 0; these testcases are in the file
dectest0.zip
This separation makes it easier to test the full or subset
arithmetics separately.
The final testcase simply runs all the testcases described above:
Group
 Description

testall
 Runs all the testcases described above (over 64,000 in all).
 
(Again, a testall0 group runs the tests where the
extended directive is set to 0. This adds a further
16,300 testcases.)
Coverage of these testcases is (of course) not exhaustive. Instead, the
testcases assure the basic operations of the arithmetic and concentrate
on ‘difficult cases’; those tests where the result may not be
immediately obvious, or where some implementation in the past has shown
a problem.
The tests in the testcase groups are derived from a number of sources,
and are intended to cover the paths and edge cases found in:
 Testcases and examples used by the X3 (now NCITS) J18
committee (1991+) which developed the ANSI standard X3.2741996.^{[2]}
 IBM VM/CMS S/370 Rexx implementation testcases (1981+)
 IBM Vienna Laboratory Rexx compiler testcases (1988+)
 NetRexx testcases (1996+)
 DiagBigDecimal – the open source testcases for
the com.ibm.math.BigDecimal Java class (1997+)
 The decNumber reference implementation testcase library (2000+)
 New testcases, e.g., for the typical concrete representations’ edge
cases, for extended values, operations, and logical and mathematical
functions, and the random tests.
The authoritative sources for how the underlying operations should work
are:
 for the subset decimal arithmetic:
ANSI X3.2741996 (plus errata, 1997–2001)^{[3]}
 for conversions, conditions, and rounding modes, and the precise
definition of result coefficients: the General
Decimal Arithmetic Specification.^{[4]}

for floatingpoint arithmetic, including subnormal and special
values (but excluding the deviations noted in the General Decimal
Arithmetic Specification):
IEEE standard 7542008,^{[5]}
Please send suggestions for improvements to the testcases to the author,
Mike Cowlishaw.
Footnotes:
[previous  contents  next]