diff options
Diffstat (limited to 'Lib')
148 files changed, 758 insertions, 466 deletions
diff --git a/Lib/decimal.py b/Lib/decimal.py index faf9bf7..7842cb2 100644 --- a/Lib/decimal.py +++ b/Lib/decimal.py @@ -214,10 +214,10 @@ class InvalidOperation(DecimalException): def handle(self, context, *args): if args: if args[0] == 1: # sNaN, must drop 's' but keep diagnostics - ans = Decimal((args[1]._sign, args[1]._int, 'n')) + ans = _dec_from_triple(args[1]._sign, args[1]._int, 'n', True) return ans._fix_nan(context) elif args[0] == 2: - return Decimal( (args[1], args[2], 'n') ) + return _dec_from_triple(args[1], args[2], 'n', True) return NaN @@ -350,13 +350,13 @@ class Overflow(Inexact, Rounded): if sign == 0: if context.rounding == ROUND_CEILING: return Infsign[sign] - return Decimal((sign, (9,)*context.prec, - context.Emax-context.prec+1)) + return _dec_from_triple(sign, '9'*context.prec, + context.Emax-context.prec+1) if sign == 1: if context.rounding == ROUND_FLOOR: return Infsign[sign] - return Decimal( (sign, (9,)*context.prec, - context.Emax-context.prec+1)) + return _dec_from_triple(sign, '9'*context.prec, + context.Emax-context.prec+1) class Underflow(Inexact, Rounded, Subnormal): @@ -531,13 +531,21 @@ class Decimal(object): Decimal("314") """ + # Note that the coefficient, self._int, is actually stored as + # a string rather than as a tuple of digits. This speeds up + # the "digits to integer" and "integer to digits" conversions + # that are used in almost every arithmetic operation on + # Decimals. This is an internal detail: the as_tuple function + # and the Decimal constructor still deal with tuples of + # digits. + self = object.__new__(cls) self._is_special = False # From an internal working value if isinstance(value, _WorkRep): self._sign = value.sign - self._int = tuple(map(int, str(value.int))) + self._int = str(value.int) self._exp = int(value.exp) return self @@ -556,7 +564,7 @@ class Decimal(object): else: self._sign = 1 self._exp = 0 - self._int = tuple(map(int, str(abs(value)))) + self._int = str(abs(value)) return self # tuple/list conversion (possibly from as_tuple()) @@ -573,7 +581,7 @@ class Decimal(object): self._sign = value[0] if value[2] == 'F': # infinity: value[1] is ignored - self._int = (0,) + self._int = '0' self._exp = value[2] self._is_special = True else: @@ -590,12 +598,12 @@ class Decimal(object): "0 through 9.") if value[2] in ('n', 'N'): # NaN: digits form the diagnostic - self._int = tuple(digits) + self._int = ''.join(map(str, digits)) self._exp = value[2] self._is_special = True elif isinstance(value[2], int): # finite number: digits give the coefficient - self._int = tuple(digits or [0]) + self._int = ''.join(map(str, digits or [0])) self._exp = value[2] self._is_special = False else: @@ -608,38 +616,46 @@ class Decimal(object): raise TypeError("Cannot convert float to Decimal. " + "First convert the float to a string") - # Other argument types may require the context during interpretation - if context is None: - context = getcontext() - # From a string # REs insist on real strings, so we can too. if isinstance(value, str): - if _isinfinity(value): - self._exp = 'F' - self._int = (0,) - self._is_special = True - if _isinfinity(value) == 1: - self._sign = 0 + m = _parser(value) + if m is None: + if context is None: + context = getcontext() + return context._raise_error(ConversionSyntax, + "Invalid literal for Decimal: %r" % value) + + if m.group('sign') == "-": + self._sign = 1 + else: + self._sign = 0 + intpart = m.group('int') + if intpart is not None: + # finite number + fracpart = m.group('frac') + exp = int(m.group('exp') or '0') + if fracpart is not None: + self._int = (intpart+fracpart).lstrip('0') or '0' + self._exp = exp - len(fracpart) else: - self._sign = 1 - return self - if _isnan(value): - sig, sign, diag = _isnan(value) - self._is_special = True - if sig == 1: - self._exp = 'n' # qNaN - else: # sig == 2 - self._exp = 'N' # sNaN - self._sign = sign - self._int = tuple(map(int, diag)) # Diagnostic info - return self - try: - self._sign, self._int, self._exp = _string2exact(value) - except ValueError: + self._int = intpart.lstrip('0') or '0' + self._exp = exp + self._is_special = False + else: + diag = m.group('diag') + if diag is not None: + # NaN + self._int = diag.lstrip('0') + if m.group('signal'): + self._exp = 'N' + else: + self._exp = 'n' + else: + # infinity + self._int = '0' + self._exp = 'F' self._is_special = True - return context._raise_error(ConversionSyntax, - "Invalid literal for Decimal: %r" % value) return self raise TypeError("Cannot convert %r to Decimal" % value) @@ -709,7 +725,7 @@ class Decimal(object): NaNs and infinities are considered nonzero. """ - return self._is_special or self._int[0] != 0 + return self._is_special or self._int != '0' def __cmp__(self, other): other = _convert_other(other) @@ -743,8 +759,8 @@ class Decimal(object): self_adjusted = self.adjusted() other_adjusted = other.adjusted() if self_adjusted == other_adjusted: - self_padded = self._int + (0,)*(self._exp - other._exp) - other_padded = other._int + (0,)*(other._exp - self._exp) + self_padded = self._int + '0'*(self._exp - other._exp) + other_padded = other._int + '0'*(other._exp - self._exp) return cmp(self_padded, other_padded) * (-1)**self._sign elif self_adjusted > other_adjusted: return (-1)**self._sign @@ -827,7 +843,7 @@ class Decimal(object): To show the internals exactly as they are. """ - return (self._sign, self._int, self._exp) + return (self._sign, tuple(map(int, self._int)), self._exp) def __repr__(self): """Represents the number as an instance of Decimal.""" @@ -843,10 +859,10 @@ class Decimal(object): if self._is_special: if self._isnan(): minus = '-'*self._sign - if self._int == (0,): + if self._int == '0': info = '' else: - info = ''.join(map(str, self._int)) + info = self._int if self._isnan() == 2: return minus + 'sNaN' + info return minus + 'NaN' + info @@ -857,7 +873,7 @@ class Decimal(object): if context is None: context = getcontext() - tmp = list(map(str, self._int)) + tmp = list(self._int) numdigits = len(self._int) leftdigits = self._exp + numdigits if eng and not self: # self = 0eX wants 0[.0[0]]eY, not [[0]0]0eY @@ -1030,7 +1046,7 @@ class Decimal(object): sign = min(self._sign, other._sign) if negativezero: sign = 1 - ans = Decimal( (sign, (0,), exp)) + ans = _dec_from_triple(sign, '0', exp) if shouldround: ans = ans._fix(context) return ans @@ -1055,7 +1071,7 @@ class Decimal(object): if op1.sign != op2.sign: # Equal and opposite if op1.int == op2.int: - ans = Decimal((negativezero, (0,), exp)) + ans = _dec_from_triple(negativezero, '0', exp) if shouldround: ans = ans._fix(context) return ans @@ -1121,7 +1137,7 @@ class Decimal(object): For example: Decimal('5.624e10')._increment() == Decimal('5.625e10') """ - L = list(self._int) + L = list(map(int, self._int)) L[-1] += 1 spot = len(L)-1 while L[spot] == 10: @@ -1131,7 +1147,7 @@ class Decimal(object): break L[spot-1] += 1 spot -= 1 - return Decimal((self._sign, L, self._exp)) + return _dec_from_triple(self._sign, "".join(map(str, L)), self._exp) def __mul__(self, other, context=None): """Return self * other. @@ -1167,20 +1183,20 @@ class Decimal(object): # Special case for multiplying by zero if not self or not other: - ans = Decimal((resultsign, (0,), resultexp)) + ans = _dec_from_triple(resultsign, '0', resultexp) if shouldround: # Fixing in case the exponent is out of bounds ans = ans._fix(context) return ans # Special case for multiplying by power of 10 - if self._int == (1,): - ans = Decimal((resultsign, other._int, resultexp)) + if self._int == '1': + ans = _dec_from_triple(resultsign, other._int, resultexp) if shouldround: ans = ans._fix(context) return ans - if other._int == (1,): - ans = Decimal((resultsign, self._int, resultexp)) + if other._int == '1': + ans = _dec_from_triple(resultsign, self._int, resultexp) if shouldround: ans = ans._fix(context) return ans @@ -1188,9 +1204,7 @@ class Decimal(object): op1 = _WorkRep(self) op2 = _WorkRep(other) - ans = Decimal((resultsign, - tuple(map(int, str(op1.int * op2.int))), - resultexp)) + ans = _dec_from_triple(resultsign, str(op1.int * op2.int), resultexp) if shouldround: ans = ans._fix(context) @@ -1221,7 +1235,7 @@ class Decimal(object): if other._isinfinity(): context._raise_error(Clamped, 'Division by infinity') - return Decimal((sign, (0,), context.Etiny())) + return _dec_from_triple(sign, '0', context.Etiny()) # Special cases for zeroes if not other: @@ -1253,7 +1267,7 @@ class Decimal(object): coeff //= 10 exp += 1 - ans = Decimal((sign, list(map(int, str(coeff))), exp)) + ans = _dec_from_triple(sign, str(coeff), exp) return ans._fix(context) def _divide(self, other, context): @@ -1270,7 +1284,7 @@ class Decimal(object): expdiff = self.adjusted() - other.adjusted() if not self or other._isinfinity() or expdiff <= -2: - return (Decimal((sign, (0,), 0)), + return (_dec_from_triple(sign, '0', 0), self._rescale(ideal_exp, context.rounding)) if expdiff <= context.prec: op1 = _WorkRep(self) @@ -1281,9 +1295,8 @@ class Decimal(object): op2.int *= 10**(op2.exp - op1.exp) q, r = divmod(op1.int, op2.int) if q < 10**context.prec: - return (Decimal((sign, list(map(int, str(q))), 0)), - Decimal((self._sign, list(map(int, str(r))), - ideal_exp))) + return (_dec_from_triple(sign, str(q), 0), + _dec_from_triple(self._sign, str(r), ideal_exp)) # Here the quotient is too large to be representable ans = context._raise_error(DivisionImpossible, @@ -1411,7 +1424,7 @@ class Decimal(object): # self = 0 -> remainder = self, with ideal exponent ideal_exponent = min(self._exp, other._exp) if not self: - ans = Decimal((self._sign, (0,), ideal_exponent)) + ans = _dec_from_triple(self._sign, '0', ideal_exponent) return ans._fix(context) # catch most cases of large or small quotient @@ -1448,7 +1461,7 @@ class Decimal(object): sign = 1-sign r = -r - ans = Decimal((sign, list(map(int, str(r))), ideal_exponent)) + ans = _dec_from_triple(sign, str(r), ideal_exponent) return ans._fix(context) def __floordiv__(self, other, context=None): @@ -1500,9 +1513,9 @@ class Decimal(object): raise OverflowError("Cannot convert infinity to int") s = (-1)**self._sign if self._exp >= 0: - return s*int(''.join(map(str, self._int)))*10**self._exp + return s*int(self._int)*10**self._exp else: - return s*int(''.join(map(str, self._int))[:self._exp] or '0') + return s*int(self._int[:self._exp] or '0') def _fix_nan(self, context): """Decapitate the payload of a NaN to fit the context""" @@ -1512,11 +1525,8 @@ class Decimal(object): # precision-1 if _clamp=1. max_payload_len = context.prec - context._clamp if len(payload) > max_payload_len: - pos = len(payload)-max_payload_len - while pos < len(payload) and payload[pos] == 0: - pos += 1 - payload = payload[pos:] - return Decimal((self._sign, payload, self._exp)) + payload = payload[len(payload)-max_payload_len:].lstrip('0') + return _dec_from_triple(self._sign, payload, self._exp, True) return Decimal(self) def _fix(self, context): @@ -1549,7 +1559,7 @@ class Decimal(object): new_exp = min(max(self._exp, Etiny), exp_max) if new_exp != self._exp: context._raise_error(Clamped) - return Decimal((self._sign, (0,), new_exp)) + return _dec_from_triple(self._sign, '0', new_exp) else: return Decimal(self) @@ -1581,7 +1591,8 @@ class Decimal(object): # we get here only if rescaling rounds the # cofficient up to exactly 10**context.prec if ans._exp < Etop: - ans = Decimal((ans._sign, ans._int[:-1], ans._exp+1)) + ans = _dec_from_triple(ans._sign, + ans._int[:-1], ans._exp+1) else: # Inexact and Rounded have already been raised ans = context._raise_error(Overflow, 'above Emax', @@ -1591,8 +1602,8 @@ class Decimal(object): # fold down if _clamp == 1 and self has too few digits if context._clamp == 1 and self._exp > Etop: context._raise_error(Clamped) - self_padded = self._int + (0,)*(self._exp - Etop) - return Decimal((self._sign, self_padded, Etop)) + self_padded = self._int + '0'*(self._exp - Etop) + return _dec_from_triple(self._sign, self_padded, Etop) # here self was representable to begin with; return unchanged return Decimal(self) @@ -1607,29 +1618,29 @@ class Decimal(object): def _round_down(self, prec): """Also known as round-towards-0, truncate.""" newexp = self._exp + len(self._int) - prec - return Decimal((self._sign, self._int[:prec] or (0,), newexp)) + return _dec_from_triple(self._sign, self._int[:prec] or '0', newexp) def _round_up(self, prec): """Rounds away from 0.""" newexp = self._exp + len(self._int) - prec - tmp = Decimal((self._sign, self._int[:prec] or (0,), newexp)) + tmp = _dec_from_triple(self._sign, self._int[:prec] or '0', newexp) for digit in self._int[prec:]: - if digit != 0: + if digit != '0': return tmp._increment() return tmp def _round_half_up(self, prec): """Rounds 5 up (away from 0)""" - if self._int[prec] >= 5: + if self._int[prec] in '56789': return self._round_up(prec) else: return self._round_down(prec) def _round_half_down(self, prec): """Round 5 down""" - if self._int[prec] == 5: + if self._int[prec] == '5': for digit in self._int[prec+1:]: - if digit != 0: + if digit != '0': break else: return self._round_down(prec) @@ -1637,7 +1648,7 @@ class Decimal(object): def _round_half_even(self, prec): """Round 5 to even, rest to nearest.""" - if prec and self._int[prec-1] & 1: + if prec and self._int[prec-1] in '13579': return self._round_half_up(prec) else: return self._round_half_down(prec) @@ -1658,7 +1669,7 @@ class Decimal(object): def _round_05up(self, prec): """Round down unless digit prec-1 is 0 or 5.""" - if prec == 0 or self._int[prec-1] in (0, 5): + if prec == 0 or self._int[prec-1] in '05': return self._round_up(prec) else: return self._round_down(prec) @@ -1776,7 +1787,7 @@ class Decimal(object): base = pow(base, 10, modulo) base = pow(base, exponent.int, modulo) - return Decimal((sign, list(map(int, str(base))), 0)) + return _dec_from_triple(sign, str(base), 0) def _power_exact(self, other, p): """Attempt to compute self**other exactly. @@ -1866,7 +1877,7 @@ class Decimal(object): zeros = min(exponent-ideal_exponent, p-1) else: zeros = 0 - return Decimal((0, (1,) + (0,)*zeros, exponent-zeros)) + return _dec_from_triple(0, '1' + '0'*zeros, exponent-zeros) # case where y is negative: xc must be either a power # of 2 or a power of 5. @@ -1927,7 +1938,7 @@ class Decimal(object): if xc >= 10**p: return None xe = -e-xe - return Decimal((0, list(map(int, str(xc))), xe)) + return _dec_from_triple(0, str(xc), xe) # now y is positive; find m and n such that y = m/n if ye >= 0: @@ -1989,7 +2000,7 @@ class Decimal(object): zeros = min(xe-ideal_exponent, p-len(str_xc)) else: zeros = 0 - return Decimal((0, list(map(int, str_xc))+[0,]*zeros, xe-zeros)) + return _dec_from_triple(0, str_xc+'0'*zeros, xe-zeros) def __pow__(self, other, modulo=None, context=None): """Return self ** other [ % modulo]. @@ -2050,12 +2061,12 @@ class Decimal(object): return context._raise_error(InvalidOperation, 'x ** y with x negative and y not an integer') # negate self, without doing any unwanted rounding - self = Decimal((0, self._int, self._exp)) + self = self.copy_negate() # 0**(+ve or Inf)= 0; 0**(-ve or -Inf) = Infinity if not self: if other._sign == 0: - return Decimal((result_sign, (0,), 0)) + return _dec_from_triple(result_sign, '0', 0) else: return Infsign[result_sign] @@ -2064,7 +2075,7 @@ class Decimal(object): if other._sign == 0: return Infsign[result_sign] else: - return Decimal((result_sign, (0,), 0)) + return _dec_from_triple(result_sign, '0', 0) # 1**other = 1, but the choice of exponent and the flags # depend on the exponent of self, and on whether other is a @@ -2091,7 +2102,7 @@ class Decimal(object): context._raise_error(Rounded) exp = 1-context.prec - return Decimal((result_sign, (1,)+(0,)*-exp, exp)) + return _dec_from_triple(result_sign, '1'+'0'*-exp, exp) # compute adjusted exponent of self self_adj = self.adjusted() @@ -2100,7 +2111,7 @@ class Decimal(object): # self ** -infinity is infinity if self < 1, 0 if self > 1 if other._isinfinity(): if (other._sign == 0) == (self_adj < 0): - return Decimal((result_sign, (0,), 0)) + return _dec_from_triple(result_sign, '0', 0) else: return Infsign[result_sign] @@ -2118,19 +2129,19 @@ class Decimal(object): # self > 1 and other +ve, or self < 1 and other -ve # possibility of overflow if bound >= len(str(context.Emax)): - ans = Decimal((result_sign, (1,), context.Emax+1)) + ans = _dec_from_triple(result_sign, '1', context.Emax+1) else: # self > 1 and other -ve, or self < 1 and other +ve # possibility of underflow to 0 Etiny = context.Etiny() if bound >= len(str(-Etiny)): - ans = Decimal((result_sign, (1,), Etiny-1)) + ans = _dec_from_triple(result_sign, '1', Etiny-1) # try for an exact result with precision +1 if ans is None: ans = self._power_exact(other, context.prec + 1) if ans is not None and result_sign == 1: - ans = Decimal((1, ans._int, ans._exp)) + ans = _dec_from_triple(1, ans._int, ans._exp) # usual case: inexact result, x**y computed directly as exp(y*log(x)) if ans is None: @@ -2151,7 +2162,7 @@ class Decimal(object): break extra += 3 - ans = Decimal((result_sign, list(map(int, str(coeff))), exp)) + ans = _dec_from_triple(result_sign, str(coeff), exp) # the specification says that for non-integer other we need to # raise Inexact, even when the result is actually exact. In @@ -2163,7 +2174,8 @@ class Decimal(object): # pad with zeros up to length context.prec+1 if necessary if len(ans._int) <= context.prec: expdiff = context.prec+1 - len(ans._int) - ans = Decimal((ans._sign, ans._int+(0,)*expdiff, ans._exp-expdiff)) + ans = _dec_from_triple(ans._sign, ans._int+'0'*expdiff, + ans._exp-expdiff) if ans.adjusted() < context.Emin: context._raise_error(Underflow) @@ -2195,14 +2207,14 @@ class Decimal(object): return dup if not dup: - return Decimal( (dup._sign, (0,), 0) ) + return _dec_from_triple(dup._sign, '0', 0) exp_max = [context.Emax, context.Etop()][context._clamp] end = len(dup._int) exp = dup._exp - while dup._int[end-1] == 0 and exp < exp_max: + while dup._int[end-1] == '0' and exp < exp_max: exp += 1 end -= 1 - return Decimal( (dup._sign, dup._int[:end], exp) ) + return _dec_from_triple(dup._sign, dup._int[:end], exp) def quantize(self, exp, rounding=None, context=None, watchexp=True): """Quantize self so its exponent is the same as that of exp. @@ -2243,7 +2255,7 @@ class Decimal(object): 'target exponent out of bounds in quantize') if not self: - ans = Decimal((self._sign, (0,), exp._exp)) + ans = _dec_from_triple(self._sign, '0', exp._exp) return ans._fix(context) self_adjusted = self.adjusted() @@ -2303,17 +2315,18 @@ class Decimal(object): if self._is_special: return Decimal(self) if not self: - return Decimal((self._sign, (0,), exp)) + return _dec_from_triple(self._sign, '0', exp) if self._exp >= exp: # pad answer with zeros if necessary - return Decimal((self._sign, self._int + (0,)*(self._exp - exp), exp)) + return _dec_from_triple(self._sign, + self._int + '0'*(self._exp - exp), exp) # too many digits; round and lose data. If self.adjusted() < # exp-1, replace self by 10**(exp-1) before rounding digits = len(self._int) + self._exp - exp if digits < 0: - self = Decimal((self._sign, (1,), exp-1)) + self = _dec_from_triple(self._sign, '1', exp-1) digits = 0 this_function = getattr(self, self._pick_rounding_function[rounding]) return this_function(digits) @@ -2336,7 +2349,7 @@ class Decimal(object): if self._exp >= 0: return Decimal(self) if not self: - return Decimal((self._sign, (0,), 0)) + return _dec_from_triple(self._sign, '0', 0) if context is None: context = getcontext() if rounding is None: @@ -2378,7 +2391,7 @@ class Decimal(object): if not self: # exponent = self._exp // 2. sqrt(-0) = -0 - ans = Decimal((self._sign, (0,), self._exp // 2)) + ans = _dec_from_triple(self._sign, '0', self._exp // 2) return ans._fix(context) if context is None: @@ -2455,7 +2468,7 @@ class Decimal(object): if n % 5 == 0: n += 1 - ans = Decimal((0, list(map(int, str(n))), e)) + ans = _dec_from_triple(0, str(n), e) # round, and fit to current context context = context._shallow_copy() @@ -2552,13 +2565,13 @@ class Decimal(object): if self._exp >= 0: return True rest = self._int[self._exp:] - return rest == (0,)*len(rest) + return rest == '0'*len(rest) def _iseven(self): """Returns True if self is even. Assumes self is an integer.""" if not self or self._exp > 0: return True - return self._int[-1+self._exp] & 1 == 0 + return self._int[-1+self._exp] in '02468' def adjusted(self): """Return the adjusted exponent of self""" @@ -2680,18 +2693,19 @@ class Decimal(object): def copy_abs(self): """Returns a copy with the sign set to 0. """ - return Decimal((0, self._int, self._exp)) + return _dec_from_triple(0, self._int, self._exp, self._is_special) def copy_negate(self): """Returns a copy with the sign inverted.""" if self._sign: - return Decimal((0, self._int, self._exp)) + return _dec_from_triple(0, self._int, self._exp, self._is_special) else: - return Decimal((1, self._int, self._exp)) + return _dec_from_triple(1, self._int, self._exp, self._is_special) def copy_sign(self, other): """Returns self with the sign of other.""" - return Decimal((other._sign, self._int, self._exp)) + return _dec_from_triple(other._sign, self._int, + self._exp, self._is_special) def exp(self, context=None): """Returns e ** self.""" @@ -2730,16 +2744,16 @@ class Decimal(object): # larger exponent the result either overflows or underflows. if self._sign == 0 and adj > len(str((context.Emax+1)*3)): # overflow - ans = Decimal((0, (1,), context.Emax+1)) + ans = _dec_from_triple(0, '1', context.Emax+1) elif self._sign == 1 and adj > len(str((-context.Etiny()+1)*3)): # underflow to 0 - ans = Decimal((0, (1,), context.Etiny()-1)) + ans = _dec_from_triple(0, '1', context.Etiny()-1) elif self._sign == 0 and adj < -p: # p+1 digits; final round will raise correct flags - ans = Decimal((0, (1,) + (0,)*(p-1) + (1,), -p)) + ans = _dec_from_triple(0, '1' + '0'*(p-1) + '1', -p) elif self._sign == 1 and adj < -p-1: # p+1 digits; final round will raise correct flags - ans = Decimal((0, (9,)*(p+1), -p-1)) + ans = _dec_from_triple(0, '9'*(p+1), -p-1) # general case else: op = _WorkRep(self) @@ -2757,7 +2771,7 @@ class Decimal(object): break extra += 3 - ans = Decimal((0, list(map(int, str(coeff))), exp)) + ans = _dec_from_triple(0, str(coeff), exp) # at this stage, ans should round correctly with *any* # rounding mode, not just with ROUND_HALF_EVEN @@ -2822,7 +2836,7 @@ class Decimal(object): def is_zero(self): """Return True if self is a zero; otherwise return False.""" - return not self._is_special and self._int[0] == 0 + return not self._is_special and self._int == '0' def _ln_exp_bound(self): """Compute a lower bound for the adjusted exponent of self.ln(). @@ -2891,7 +2905,7 @@ class Decimal(object): if coeff % (5*10**(len(str(abs(coeff)))-p-1)): break places += 3 - ans = Decimal((int(coeff<0), list(map(int, str(abs(coeff)))), -places)) + ans = _dec_from_triple(int(coeff<0), str(abs(coeff)), -places) context = context._shallow_copy() rounding = context._set_rounding(ROUND_HALF_EVEN) @@ -2954,7 +2968,7 @@ class Decimal(object): 'log10 of a negative value') # log10(10**n) = n - if self._int[0] == 1 and self._int[1:] == (0,)*(len(self._int) - 1): + if self._int[0] == '1' and self._int[1:] == '0'*(len(self._int) - 1): # answer may need rounding ans = Decimal(self._exp + len(self._int) - 1) else: @@ -2972,8 +2986,7 @@ class Decimal(object): if coeff % (5*10**(len(str(abs(coeff)))-p-1)): break places += 3 - ans = Decimal((int(coeff<0), list(map(int, str(abs(coeff)))), - -places)) + ans = _dec_from_triple(int(coeff<0), str(abs(coeff)), -places) context = context._shallow_copy() rounding = context._set_rounding(ROUND_HALF_EVEN) @@ -3020,19 +3033,19 @@ class Decimal(object): if self._sign != 0 or self._exp != 0: return False for dig in self._int: - if dig not in (0, 1): + if dig not in '01': return False return True def _fill_logical(self, context, opa, opb): dif = context.prec - len(opa) if dif > 0: - opa = (0,)*dif + opa + opa = '0'*dif + opa elif dif < 0: opa = opa[-context.prec:] dif = context.prec - len(opb) if dif > 0: - opb = (0,)*dif + opb + opb = '0'*dif + opb elif dif < 0: opb = opb[-context.prec:] return opa, opb @@ -3048,22 +3061,15 @@ class Decimal(object): (opa, opb) = self._fill_logical(context, self._int, other._int) # make the operation, and clean starting zeroes - result = [a&b for a,b in zip(opa,opb)] - for i,d in enumerate(result): - if d == 1: - break - result = tuple(result[i:]) - - # if empty, we must have at least a zero - if not result: - result = (0,) - return Decimal((0, result, 0)) + result = "".join([str(int(a)&int(b)) for a,b in zip(opa,opb)]) + return _dec_from_triple(0, result.lstrip('0') or '0', 0) def logical_invert(self, context=None): """Invert all its digits.""" if context is None: context = getcontext() - return self.logical_xor(Decimal((0,(1,)*context.prec,0)), context) + return self.logical_xor(_dec_from_triple(0,'1'*context.prec,0), + context) def logical_or(self, other, context=None): """Applies an 'or' operation between self and other's digits.""" @@ -3076,16 +3082,8 @@ class Decimal(object): (opa, opb) = self._fill_logical(context, self._int, other._int) # make the operation, and clean starting zeroes - result = [a|b for a,b in zip(opa,opb)] - for i,d in enumerate(result): - if d == 1: - break - result = tuple(result[i:]) - - # if empty, we must have at least a zero - if not result: - result = (0,) - return Decimal((0, result, 0)) + result = "".join(str(int(a)|int(b)) for a,b in zip(opa,opb)) + return _dec_from_triple(0, result.lstrip('0') or '0', 0) def logical_xor(self, other, context=None): """Applies an 'xor' operation between self and other's digits.""" @@ -3098,16 +3096,8 @@ class Decimal(object): (opa, opb) = self._fill_logical(context, self._int, other._int) # make the operation, and clean starting zeroes - result = [a^b for a,b in zip(opa,opb)] - for i,d in enumerate(result): - if d == 1: - break - result = tuple(result[i:]) - - # if empty, we must have at least a zero - if not result: - result = (0,) - return Decimal((0, result, 0)) + result = "".join(str(int(a)^int(b)) for a,b in zip(opa,opb)) + return _dec_from_triple(0, result.lstrip('0') or '0', 0) def max_mag(self, other, context=None): """Compares the values numerically with their sign ignored.""" @@ -3185,7 +3175,7 @@ class Decimal(object): if self._isinfinity() == -1: return negInf if self._isinfinity() == 1: - return Decimal((0, (9,)*context.prec, context.Etop())) + return _dec_from_triple(0, '9'*context.prec, context.Etop()) context = context.copy() context._set_rounding(ROUND_FLOOR) @@ -3193,7 +3183,8 @@ class Decimal(object): new_self = self._fix(context) if new_self != self: return new_self - return self.__sub__(Decimal((0, (1,), context.Etiny()-1)), context) + return self.__sub__(_dec_from_triple(0, '1', context.Etiny()-1), + context) def next_plus(self, context=None): """Returns the smallest representable number larger than itself.""" @@ -3207,7 +3198,7 @@ class Decimal(object): if self._isinfinity() == 1: return Inf if self._isinfinity() == -1: - return Decimal((1, (9,)*context.prec, context.Etop())) + return _dec_from_triple(1, '9'*context.prec, context.Etop()) context = context.copy() context._set_rounding(ROUND_CEILING) @@ -3215,7 +3206,8 @@ class Decimal(object): new_self = self._fix(context) if new_self != self: return new_self - return self.__add__(Decimal((0, (1,), context.Etiny()-1)), context) + return self.__add__(_dec_from_triple(0, '1', context.Etiny()-1), + context) def next_toward(self, other, context=None): """Returns the number closest to self, in the direction towards other. @@ -3237,7 +3229,7 @@ class Decimal(object): comparison = self.__cmp__(other) if comparison == 0: - return Decimal((other._sign, self._int, self._exp)) + return self.copy_sign(other) if comparison == -1: ans = self.next_plus(context) @@ -3331,19 +3323,12 @@ class Decimal(object): rotdig = self._int topad = context.prec - len(rotdig) if topad: - rotdig = ((0,)*topad) + rotdig + rotdig = '0'*topad + rotdig # let's rotate! rotated = rotdig[torot:] + rotdig[:torot] - - # clean starting zeroes - for i,d in enumerate(rotated): - if d != 0: - break - rotated = rotated[i:] - - return Decimal((self._sign, rotated, self._exp)) - + return _dec_from_triple(self._sign, + rotated.lstrip('0') or '0', self._exp) def scaleb (self, other, context=None): """Returns self operand after adding the second value to its exp.""" @@ -3364,7 +3349,7 @@ class Decimal(object): if self._isinfinity(): return Decimal(self) - d = Decimal((self._sign, self._int, self._exp + int(other))) + d = _dec_from_triple(self._sign, self._int, self._exp + int(other)) d = d._fix(context) return d @@ -3392,26 +3377,17 @@ class Decimal(object): rotdig = self._int topad = context.prec - len(rotdig) if topad: - rotdig = ((0,)*topad) + rotdig + rotdig = '0'*topad + rotdig # let's shift! if torot < 0: rotated = rotdig[:torot] else: - rotated = (rotdig + ((0,) * torot)) + rotated = rotdig + '0'*torot rotated = rotated[-context.prec:] - # clean starting zeroes - if rotated: - for i,d in enumerate(rotated): - if d != 0: - break - rotated = rotated[i:] - else: - rotated = (0,) - - return Decimal((self._sign, rotated, self._exp)) - + return _dec_from_triple(self._sign, + rotated.lstrip('0') or '0', self._exp) # Support for pickling, copy, and deepcopy def __reduce__(self): @@ -3427,6 +3403,22 @@ class Decimal(object): return self # My components are also immutable return self.__class__(str(self)) +def _dec_from_triple(sign, coefficient, exponent, special=False): + """Create a decimal instance directly, without any validation, + normalization (e.g. removal of leading zeros) or argument + conversion. + + This function is for *internal use only*. + """ + + self = object.__new__(Decimal) + self._sign = sign + self._int = coefficient + self._exp = exponent + self._is_special = special + + return self + ##### Context class ####################################################### @@ -4775,10 +4767,7 @@ class _WorkRep(object): self.exp = None elif isinstance(value, Decimal): self.sign = value._sign - cum = 0 - for digit in value._int: - cum = cum * 10 + digit - self.int = cum + self.int = int(value._int) self.exp = value._exp else: # assert isinstance(value, tuple) @@ -5175,53 +5164,6 @@ def _convert_other(other, raiseit=False): raise TypeError("Unable to convert %s to Decimal" % other) return NotImplemented -_infinity_map = { - 'inf' : 1, - 'infinity' : 1, - '+inf' : 1, - '+infinity' : 1, - '-inf' : -1, - '-infinity' : -1 -} - -def _isinfinity(num): - """Determines whether a string or float is infinity. - - +1 for negative infinity; 0 for finite ; +1 for positive infinity - """ - num = str(num).lower() - return _infinity_map.get(num, 0) - -def _isnan(num): - """Determines whether a string or float is NaN - - (1, sign, diagnostic info as string) => NaN - (2, sign, diagnostic info as string) => sNaN - 0 => not a NaN - """ - num = str(num).lower() - if not num: - return 0 - - # Get the sign, get rid of trailing [+-] - sign = 0 - if num[0] == '+': - num = num[1:] - elif num[0] == '-': # elif avoids '+-nan' - num = num[1:] - sign = 1 - - if num.startswith('nan'): - if len(num) > 3 and not num[3:].isdigit(): # diagnostic info - return 0 - return (1, sign, num[3:].lstrip('0')) - if num.startswith('snan'): - if len(num) > 4 and not num[4:].isdigit(): - return 0 - return (2, sign, num[4:].lstrip('0')) - return 0 - - ##### Setup Specific Contexts ############################################ # The default context prototype used by Context() @@ -5255,91 +5197,62 @@ ExtendedContext = Context( ) -##### Useful Constants (internal use only) ################################ - -# Reusable defaults -Inf = Decimal('Inf') -negInf = Decimal('-Inf') -NaN = Decimal('NaN') -Dec_0 = Decimal(0) -Dec_p1 = Decimal(1) -Dec_n1 = Decimal(-1) -Dec_p2 = Decimal(2) -Dec_n2 = Decimal(-2) - -# Infsign[sign] is infinity w/ that sign -Infsign = (Inf, negInf) - - ##### crud for parsing strings ############################################# import re -# There's an optional sign at the start, and an optional exponent -# at the end. The exponent has an optional sign and at least one -# digit. In between, must have either at least one digit followed -# by an optional fraction, or a decimal point followed by at least -# one digit. Yuck. +# Regular expression used for parsing numeric strings. Additional +# comments: +# +# 1. Uncomment the two '\s*' lines to allow leading and/or trailing +# whitespace. But note that the specification disallows whitespace in +# a numeric string. +# +# 2. For finite numbers (not infinities and NaNs) the body of the +# number between the optional sign and the optional exponent must have +# at least one decimal digit, possibly after the decimal point. The +# lookahead expression '(?=\d|\.\d)' checks this. +# +# As the flag UNICODE is not enabled here, we're explicitly avoiding any +# other meaning for \d than the numbers [0-9]. -_parser = re.compile(r""" +import re +_parser = re.compile(r""" # A numeric string consists of: # \s* - (?P<sign>[-+])? + (?P<sign>[-+])? # an optional sign, followed by either... ( - (?P<int>\d+) (\. (?P<frac>\d*))? + (?=\d|\.\d) # ...a number (with at least one digit) + (?P<int>\d*) # consisting of a (possibly empty) integer part + (\.(?P<frac>\d*))? # followed by an optional fractional part + (E(?P<exp>[-+]?\d+))? # followed by an optional exponent, or... | - \. (?P<onlyfrac>\d+) + Inf(inity)? # ...an infinity, or... + | + (?P<signal>s)? # ...an (optionally signaling) + NaN # NaN + (?P<diag>\d*) # with (possibly empty) diagnostic information. ) - ([eE](?P<exp>[-+]? \d+))? # \s* $ -""", re.VERBOSE).match # Uncomment the \s* to allow leading or trailing spaces. +""", re.VERBOSE | re.IGNORECASE).match del re -def _string2exact(s): - """Return sign, n, p s.t. - Float string value == -1**sign * n * 10**p exactly - """ - m = _parser(s) - if m is None: - raise ValueError("invalid literal for Decimal: %r" % s) +##### Useful Constants (internal use only) ################################ - if m.group('sign') == "-": - sign = 1 - else: - sign = 0 +# Reusable defaults +Inf = Decimal('Inf') +negInf = Decimal('-Inf') +NaN = Decimal('NaN') +Dec_0 = Decimal(0) +Dec_p1 = Decimal(1) +Dec_n1 = Decimal(-1) +Dec_p2 = Decimal(2) +Dec_n2 = Decimal(-2) - exp = m.group('exp') - if exp is None: - exp = 0 - else: - exp = int(exp) +# Infsign[sign] is infinity w/ that sign +Infsign = (Inf, negInf) - intpart = m.group('int') - if intpart is None: - intpart = "" - fracpart = m.group('onlyfrac') - else: - fracpart = m.group('frac') - if fracpart is None: - fracpart = "" - - exp -= len(fracpart) - - mantissa = intpart + fracpart - tmp = list(map(int, mantissa)) - backup = tmp - while tmp and tmp[0] == 0: - del tmp[0] - - # It's a zero - if not tmp: - if backup: - return (sign, tuple(backup), exp) - return (sign, (0,), exp) - mantissa = tuple(tmp) - - return (sign, mantissa, exp) if __name__ == '__main__': diff --git a/Lib/doctest.py b/Lib/doctest.py index eee2f51..5b18073 100644 --- a/Lib/doctest.py +++ b/Lib/doctest.py @@ -315,8 +315,21 @@ class _OutputRedirectingPdb(pdb.Pdb): """ def __init__(self, out): self.__out = out + self.__debugger_used = False pdb.Pdb.__init__(self, stdout=out) + def set_trace(self, frame=None): + self.__debugger_used = True + if frame is None: + frame = sys._getframe().f_back + pdb.Pdb.set_trace(self, frame) + + def set_continue(self): + # Calling set_continue unconditionally would break unit test + # coverage reporting, as Bdb.set_continue calls sys.settrace(None). + if self.__debugger_used: + pdb.Pdb.set_continue(self) + def trace_dispatch(self, *args): # Redirect stdout to the given stream. save_stdout = sys.stdout diff --git a/Lib/test/decimaltestdata/abs.decTest b/Lib/test/decimaltestdata/abs.decTest index ed4c46e..39f2dca 100644 --- a/Lib/test/decimaltestdata/abs.decTest +++ b/Lib/test/decimaltestdata/abs.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- This set of tests primarily tests the existence of the operator. -- Additon, subtraction, rounding, and more overflows are tested diff --git a/Lib/test/decimaltestdata/add.decTest b/Lib/test/decimaltestdata/add.decTest index 3460aa4..8db222a 100644 --- a/Lib/test/decimaltestdata/add.decTest +++ b/Lib/test/decimaltestdata/add.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 precision: 9 rounding: half_up @@ -1122,6 +1122,15 @@ addx1116 add -1e-3 +1e-383 -> -0.0009999999999999999 Rounded Inexact addx1117 add -1e-4 +1e-383 -> -0.00009999999999999999 Rounded Inexact addx1118 add -1e-5 +1e-383 -> -0.000009999999999999999 Rounded Inexact addx1119 add -1e-6 +1e-383 -> -9.999999999999999E-7 Rounded Inexact +addx1120 add +1e-383 -1e+2 -> -99.99999999999999 Rounded Inexact +addx1121 add +1e-383 -1e+1 -> -9.999999999999999 Rounded Inexact +addx1123 add +1e-383 -1 -> -0.9999999999999999 Rounded Inexact +addx1124 add +1e-383 -1e-1 -> -0.09999999999999999 Rounded Inexact +addx1125 add +1e-383 -1e-2 -> -0.009999999999999999 Rounded Inexact +addx1126 add +1e-383 -1e-3 -> -0.0009999999999999999 Rounded Inexact +addx1127 add +1e-383 -1e-4 -> -0.00009999999999999999 Rounded Inexact +addx1128 add +1e-383 -1e-5 -> -0.000009999999999999999 Rounded Inexact +addx1129 add +1e-383 -1e-6 -> -9.999999999999999E-7 Rounded Inexact rounding: down precision: 7 @@ -1658,17 +1667,19 @@ addx6056 add '1.3' '-2.07' -> '-0.77' addx6057 add '1E+2' '1E+4' -> '1.01E+4' -- from above -addx6061 add 1 '0.1' -> '1.1' -addx6062 add 1 '0.01' -> '1.01' -addx6063 add 1 '0.001' -> '1.001' -addx6064 add 1 '0.0001' -> '1.0001' -addx6065 add 1 '0.00001' -> '1.00001' -addx6066 add 1 '0.000001' -> '1.000001' -addx6067 add 1 '0.0000001' -> '1.0000001' -addx6068 add 1 '0.00000001' -> '1.00000001' +addx6060 add 1 '0.1' -> '1.1' +addx6061 add 1 '0.01' -> '1.01' +addx6062 add 1 '0.001' -> '1.001' +addx6063 add 1 '0.0001' -> '1.0001' +addx6064 add 1 '0.00001' -> '1.00001' +addx6065 add 1 '0.000001' -> '1.000001' +addx6066 add 1 '0.0000001' -> '1.0000001' +addx6067 add 1 '0.00000001' -> '1.00000001' -- cancellation to integer -addx6069 add 99999999999999123456789 -99999999999999E+9 -> 123456789 +addx6068 add 99999999999999123456789 -99999999999999E+9 -> 123456789 +-- similar from FMA fun +addx6069 add "-1234567890123455.234567890123454" "1234567890123456" -> 0.765432109876546 -- some funny zeros [in case of bad signum] addx6070 add 1 0 -> 1 diff --git a/Lib/test/decimaltestdata/and.decTest b/Lib/test/decimaltestdata/and.decTest index 18ba881..90490a5 100644 --- a/Lib/test/decimaltestdata/and.decTest +++ b/Lib/test/decimaltestdata/and.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/base.decTest b/Lib/test/decimaltestdata/base.decTest index de0b813..58ce91c 100644 --- a/Lib/test/decimaltestdata/base.decTest +++ b/Lib/test/decimaltestdata/base.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 extended: 1 -- This file tests base conversions from string to a decimal number diff --git a/Lib/test/decimaltestdata/clamp.decTest b/Lib/test/decimaltestdata/clamp.decTest index eca0cfb..48e27c0 100644 --- a/Lib/test/decimaltestdata/clamp.decTest +++ b/Lib/test/decimaltestdata/clamp.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- This set of tests uses the same limits as the 8-byte concrete -- representation, but applies clamping without using format-specific diff --git a/Lib/test/decimaltestdata/class.decTest b/Lib/test/decimaltestdata/class.decTest index 77a22e3..61ad548 100644 --- a/Lib/test/decimaltestdata/class.decTest +++ b/Lib/test/decimaltestdata/class.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- [New 2006.11.27]
diff --git a/Lib/test/decimaltestdata/compare.decTest b/Lib/test/decimaltestdata/compare.decTest index 2d5e664..979cc52 100644 --- a/Lib/test/decimaltestdata/compare.decTest +++ b/Lib/test/decimaltestdata/compare.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- Note that we cannot assume add/subtract tests cover paths adequately, -- here, because the code might be quite different (comparison cannot diff --git a/Lib/test/decimaltestdata/comparetotal.decTest b/Lib/test/decimaltestdata/comparetotal.decTest index 737293f..ef2914f 100644 --- a/Lib/test/decimaltestdata/comparetotal.decTest +++ b/Lib/test/decimaltestdata/comparetotal.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Note that we cannot assume add/subtract tests cover paths adequately,
-- here, because the code might be quite different (comparison cannot
diff --git a/Lib/test/decimaltestdata/comparetotmag.decTest b/Lib/test/decimaltestdata/comparetotmag.decTest index a12e614..4a51d7f 100644 --- a/Lib/test/decimaltestdata/comparetotmag.decTest +++ b/Lib/test/decimaltestdata/comparetotmag.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Note that it cannot be assumed that add/subtract tests cover paths
-- for this operation adequately, here, because the code might be
diff --git a/Lib/test/decimaltestdata/copy.decTest b/Lib/test/decimaltestdata/copy.decTest index 5d4065d..e6edac5 100644 --- a/Lib/test/decimaltestdata/copy.decTest +++ b/Lib/test/decimaltestdata/copy.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/copyabs.decTest b/Lib/test/decimaltestdata/copyabs.decTest index 7457552..4479888 100644 --- a/Lib/test/decimaltestdata/copyabs.decTest +++ b/Lib/test/decimaltestdata/copyabs.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/copynegate.decTest b/Lib/test/decimaltestdata/copynegate.decTest index 3e502be..7cf124c 100644 --- a/Lib/test/decimaltestdata/copynegate.decTest +++ b/Lib/test/decimaltestdata/copynegate.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/copysign.decTest b/Lib/test/decimaltestdata/copysign.decTest index 6b20fda..ed60893 100644 --- a/Lib/test/decimaltestdata/copysign.decTest +++ b/Lib/test/decimaltestdata/copysign.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/ddAbs.decTest b/Lib/test/decimaltestdata/ddAbs.decTest index 4da662c..58b7902 100644 --- a/Lib/test/decimaltestdata/ddAbs.decTest +++ b/Lib/test/decimaltestdata/ddAbs.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/ddAdd.decTest b/Lib/test/decimaltestdata/ddAdd.decTest index 49d89d4..38d511b 100644 --- a/Lib/test/decimaltestdata/ddAdd.decTest +++ b/Lib/test/decimaltestdata/ddAdd.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This set of tests are for decDoubles only; all arguments are
-- representable in a decDouble
@@ -1029,6 +1029,16 @@ 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
diff --git a/Lib/test/decimaltestdata/ddAnd.decTest b/Lib/test/decimaltestdata/ddAnd.decTest index e5fa38d..850da17 100644 --- a/Lib/test/decimaltestdata/ddAnd.decTest +++ b/Lib/test/decimaltestdata/ddAnd.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/ddBase.decTest b/Lib/test/decimaltestdata/ddBase.decTest index 431bce1..ddc8185 100644 --- a/Lib/test/decimaltestdata/ddBase.decTest +++ b/Lib/test/decimaltestdata/ddBase.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This file tests base conversions from string to a decimal number
-- and back to a string (in Scientific form)
diff --git a/Lib/test/decimaltestdata/ddCanonical.decTest b/Lib/test/decimaltestdata/ddCanonical.decTest index 308b9ff..4d659b0 100644 --- a/Lib/test/decimaltestdata/ddCanonical.decTest +++ b/Lib/test/decimaltestdata/ddCanonical.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This file tests that copy operations leave uncanonical operands
-- unchanged, and vice versa
diff --git a/Lib/test/decimaltestdata/ddClass.decTest b/Lib/test/decimaltestdata/ddClass.decTest index 0b1d1f3..8a38f4a 100644 --- a/Lib/test/decimaltestdata/ddClass.decTest +++ b/Lib/test/decimaltestdata/ddClass.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- [New 2006.11.27]
precision: 16
diff --git a/Lib/test/decimaltestdata/ddCompare.decTest b/Lib/test/decimaltestdata/ddCompare.decTest index b225d0d..5f6fba5 100644 --- a/Lib/test/decimaltestdata/ddCompare.decTest +++ b/Lib/test/decimaltestdata/ddCompare.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Note that we cannot assume add/subtract tests cover paths adequately,
-- here, because the code might be quite different (comparison cannot
diff --git a/Lib/test/decimaltestdata/ddCompareSig.decTest b/Lib/test/decimaltestdata/ddCompareSig.decTest index 388a656..b4895da 100644 --- a/Lib/test/decimaltestdata/ddCompareSig.decTest +++ b/Lib/test/decimaltestdata/ddCompareSig.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Note that we cannot assume add/subtract tests cover paths adequately,
-- here, because the code might be quite different (comparison cannot
diff --git a/Lib/test/decimaltestdata/ddCompareTotal.decTest b/Lib/test/decimaltestdata/ddCompareTotal.decTest index a8bf477..b86b8df 100644 --- a/Lib/test/decimaltestdata/ddCompareTotal.decTest +++ b/Lib/test/decimaltestdata/ddCompareTotal.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Note that we cannot assume add/subtract tests cover paths adequately,
-- here, because the code might be quite different (comparison cannot
diff --git a/Lib/test/decimaltestdata/ddCompareTotalMag.decTest b/Lib/test/decimaltestdata/ddCompareTotalMag.decTest index b19cf64..e93a749 100644 --- a/Lib/test/decimaltestdata/ddCompareTotalMag.decTest +++ b/Lib/test/decimaltestdata/ddCompareTotalMag.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Note that we cannot assume add/subtract tests cover paths adequately,
-- here, because the code might be quite different (comparison cannot
diff --git a/Lib/test/decimaltestdata/ddCopy.decTest b/Lib/test/decimaltestdata/ddCopy.decTest index 49c6824..9d82db7 100644 --- a/Lib/test/decimaltestdata/ddCopy.decTest +++ b/Lib/test/decimaltestdata/ddCopy.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decDoubles.
precision: 16
diff --git a/Lib/test/decimaltestdata/ddCopyAbs.decTest b/Lib/test/decimaltestdata/ddCopyAbs.decTest index b65f063..c60cc38 100644 --- a/Lib/test/decimaltestdata/ddCopyAbs.decTest +++ b/Lib/test/decimaltestdata/ddCopyAbs.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decDoubles.
precision: 16
diff --git a/Lib/test/decimaltestdata/ddCopyNegate.decTest b/Lib/test/decimaltestdata/ddCopyNegate.decTest index b111c9b..c2c6098 100644 --- a/Lib/test/decimaltestdata/ddCopyNegate.decTest +++ b/Lib/test/decimaltestdata/ddCopyNegate.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decDoubles.
precision: 16
diff --git a/Lib/test/decimaltestdata/ddCopySign.decTest b/Lib/test/decimaltestdata/ddCopySign.decTest index 7c83416..36b060e 100644 --- a/Lib/test/decimaltestdata/ddCopySign.decTest +++ b/Lib/test/decimaltestdata/ddCopySign.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decDoubles.
precision: 16
diff --git a/Lib/test/decimaltestdata/ddDivide.decTest b/Lib/test/decimaltestdata/ddDivide.decTest index 1a953f7..9069894 100644 --- a/Lib/test/decimaltestdata/ddDivide.decTest +++ b/Lib/test/decimaltestdata/ddDivide.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/ddDivideInt.decTest b/Lib/test/decimaltestdata/ddDivideInt.decTest index 782fe8d..7116841 100644 --- a/Lib/test/decimaltestdata/ddDivideInt.decTest +++ b/Lib/test/decimaltestdata/ddDivideInt.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/ddEncode.decTest b/Lib/test/decimaltestdata/ddEncode.decTest index 16264fc..3fa434c 100644 --- a/Lib/test/decimaltestdata/ddEncode.decTest +++ b/Lib/test/decimaltestdata/ddEncode.decTest @@ -18,7 +18,7 @@ -- mfc@uk.ibm.com --
------------------------------------------------------------------------
-- [Previously called decimal64.decTest]
-version: 2.56
+version: 2.57
-- This set of tests is for the eight-byte concrete representation.
-- Its characteristics are:
@@ -485,3 +485,6 @@ decd828 apply #2238000115afb55a -> 4294967294 decd829 apply #2238000115afb55b -> 4294967295
decd830 apply #2238000115afb57a -> 4294967296
decd831 apply #2238000115afb57b -> 4294967297
+
+-- for narrowing
+decd840 apply #2870000000000000 -> 2.000000000000000E-99
diff --git a/Lib/test/decimaltestdata/ddFMA.decTest b/Lib/test/decimaltestdata/ddFMA.decTest index 946d680..bc44b6a 100644 --- a/Lib/test/decimaltestdata/ddFMA.decTest +++ b/Lib/test/decimaltestdata/ddFMA.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
@@ -1663,6 +1663,34 @@ ddfma375087 fma 1 12345678 1E-33 -> 12345678.00000001 Inexac ddfma375088 fma 1 12345678 1E-34 -> 12345678.00000001 Inexact Rounded
ddfma375089 fma 1 12345678 1E-35 -> 12345678.00000001 Inexact Rounded
+-- desctructive 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 2697f59..b4ae744 100644 --- a/Lib/test/decimaltestdata/ddInvert.decTest +++ b/Lib/test/decimaltestdata/ddInvert.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/ddLogB.decTest b/Lib/test/decimaltestdata/ddLogB.decTest index f18fd5e..99a3843 100644 --- a/Lib/test/decimaltestdata/ddLogB.decTest +++ b/Lib/test/decimaltestdata/ddLogB.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/ddMax.decTest b/Lib/test/decimaltestdata/ddMax.decTest index 5fe600f..515f79a 100644 --- a/Lib/test/decimaltestdata/ddMax.decTest +++ b/Lib/test/decimaltestdata/ddMax.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- we assume that base comparison is tested in compare.decTest, so
-- these mainly cover special cases and rounding
diff --git a/Lib/test/decimaltestdata/ddMaxMag.decTest b/Lib/test/decimaltestdata/ddMaxMag.decTest index dbabc99..c43c460 100644 --- a/Lib/test/decimaltestdata/ddMaxMag.decTest +++ b/Lib/test/decimaltestdata/ddMaxMag.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- we assume that base comparison is tested in compare.decTest, so
-- these mainly cover special cases and rounding
diff --git a/Lib/test/decimaltestdata/ddMin.decTest b/Lib/test/decimaltestdata/ddMin.decTest index 4ba27f7..c77a71e 100644 --- a/Lib/test/decimaltestdata/ddMin.decTest +++ b/Lib/test/decimaltestdata/ddMin.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- we assume that base comparison is tested in compare.decTest, so
-- these mainly cover special cases and rounding
diff --git a/Lib/test/decimaltestdata/ddMinMag.decTest b/Lib/test/decimaltestdata/ddMinMag.decTest index cc5ccec0..9291abc 100644 --- a/Lib/test/decimaltestdata/ddMinMag.decTest +++ b/Lib/test/decimaltestdata/ddMinMag.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- we assume that base comparison is tested in compare.decTest, so
-- these mainly cover special cases and rounding
diff --git a/Lib/test/decimaltestdata/ddMinus.decTest b/Lib/test/decimaltestdata/ddMinus.decTest index 9fe196b..07dfa7a 100644 --- a/Lib/test/decimaltestdata/ddMinus.decTest +++ b/Lib/test/decimaltestdata/ddMinus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decDoubles.
precision: 16
diff --git a/Lib/test/decimaltestdata/ddMultiply.decTest b/Lib/test/decimaltestdata/ddMultiply.decTest index 01e0ffe..f506ea2 100644 --- a/Lib/test/decimaltestdata/ddMultiply.decTest +++ b/Lib/test/decimaltestdata/ddMultiply.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This set of tests are for decDoubles only; all arguments are
-- representable in a decDouble
@@ -454,9 +454,92 @@ ddmul908 multiply 9.999999999999999E-383 0.09999999999999999 -> 1.00000000 -- hugest
ddmul909 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
-ddmul990 multiply 10 # -> NaN Invalid_operation
-ddmul991 multiply # 10 -> NaN Invalid_operation
+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 97c3b09..b9b0de5 100644 --- a/Lib/test/decimaltestdata/ddNextMinus.decTest +++ b/Lib/test/decimaltestdata/ddNextMinus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decDoubles.
precision: 16
diff --git a/Lib/test/decimaltestdata/ddNextPlus.decTest b/Lib/test/decimaltestdata/ddNextPlus.decTest index d01f3c3..2bb2641 100644 --- a/Lib/test/decimaltestdata/ddNextPlus.decTest +++ b/Lib/test/decimaltestdata/ddNextPlus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decDoubles.
precision: 16
diff --git a/Lib/test/decimaltestdata/ddNextToward.decTest b/Lib/test/decimaltestdata/ddNextToward.decTest index e00751b..80e4ac6 100644 --- a/Lib/test/decimaltestdata/ddNextToward.decTest +++ b/Lib/test/decimaltestdata/ddNextToward.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decDoubles.
precision: 16
diff --git a/Lib/test/decimaltestdata/ddOr.decTest b/Lib/test/decimaltestdata/ddOr.decTest index 3a8cdd6..903ced0 100644 --- a/Lib/test/decimaltestdata/ddOr.decTest +++ b/Lib/test/decimaltestdata/ddOr.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/ddPlus.decTest b/Lib/test/decimaltestdata/ddPlus.decTest index 962a656..0a2b838 100644 --- a/Lib/test/decimaltestdata/ddPlus.decTest +++ b/Lib/test/decimaltestdata/ddPlus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decDoubles.
precision: 16
diff --git a/Lib/test/decimaltestdata/ddQuantize.decTest b/Lib/test/decimaltestdata/ddQuantize.decTest index 234db92..8cd5287 100644 --- a/Lib/test/decimaltestdata/ddQuantize.decTest +++ b/Lib/test/decimaltestdata/ddQuantize.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Most of the tests here assume a "regular pattern", where the
-- sign and coefficient are +1.
diff --git a/Lib/test/decimaltestdata/ddReduce.decTest b/Lib/test/decimaltestdata/ddReduce.decTest index 71c82e1..545beeb 100644 --- a/Lib/test/decimaltestdata/ddReduce.decTest +++ b/Lib/test/decimaltestdata/ddReduce.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/ddRemainder.decTest b/Lib/test/decimaltestdata/ddRemainder.decTest index c7ea762..d805a48 100644 --- a/Lib/test/decimaltestdata/ddRemainder.decTest +++ b/Lib/test/decimaltestdata/ddRemainder.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
@@ -581,6 +581,19 @@ 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 1f3bafd..dfcd3eb 100644 --- a/Lib/test/decimaltestdata/ddRemainderNear.decTest +++ b/Lib/test/decimaltestdata/ddRemainderNear.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
@@ -599,6 +599,7 @@ 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
@@ -609,6 +610,19 @@ 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 473f2f6..e6294b3 100644 --- a/Lib/test/decimaltestdata/ddRotate.decTest +++ b/Lib/test/decimaltestdata/ddRotate.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/ddSameQuantum.decTest b/Lib/test/decimaltestdata/ddSameQuantum.decTest index a396cd1..6f7db15 100644 --- a/Lib/test/decimaltestdata/ddSameQuantum.decTest +++ b/Lib/test/decimaltestdata/ddSameQuantum.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decDoubles.
precision: 16
diff --git a/Lib/test/decimaltestdata/ddScaleB.decTest b/Lib/test/decimaltestdata/ddScaleB.decTest index 4091f86..d0b92b5 100644 --- a/Lib/test/decimaltestdata/ddScaleB.decTest +++ b/Lib/test/decimaltestdata/ddScaleB.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/ddShift.decTest b/Lib/test/decimaltestdata/ddShift.decTest index 2cbe06a..f2e80b3 100644 --- a/Lib/test/decimaltestdata/ddShift.decTest +++ b/Lib/test/decimaltestdata/ddShift.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/ddSubtract.decTest b/Lib/test/decimaltestdata/ddSubtract.decTest index 89895e9..b10f5e4 100644 --- a/Lib/test/decimaltestdata/ddSubtract.decTest +++ b/Lib/test/decimaltestdata/ddSubtract.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This set of tests are for decDoubles only; all arguments are
-- representable in a decDouble
diff --git a/Lib/test/decimaltestdata/ddToIntegral.decTest b/Lib/test/decimaltestdata/ddToIntegral.decTest index 1e3e573..438d347 100644 --- a/Lib/test/decimaltestdata/ddToIntegral.decTest +++ b/Lib/test/decimaltestdata/ddToIntegral.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This set of tests tests the extended specification 'round-to-integral
-- value-exact' operations (from IEEE 854, later modified in 754r).
diff --git a/Lib/test/decimaltestdata/ddXor.decTest b/Lib/test/decimaltestdata/ddXor.decTest index 783fc2b..78e9750 100644 --- a/Lib/test/decimaltestdata/ddXor.decTest +++ b/Lib/test/decimaltestdata/ddXor.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
precision: 16
maxExponent: 384
diff --git a/Lib/test/decimaltestdata/decDouble.decTest b/Lib/test/decimaltestdata/decDouble.decTest index d5205b7..bdbf678 100644 --- a/Lib/test/decimaltestdata/decDouble.decTest +++ b/Lib/test/decimaltestdata/decDouble.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- decDouble tests dectest: ddAbs diff --git a/Lib/test/decimaltestdata/decQuad.decTest b/Lib/test/decimaltestdata/decQuad.decTest index 4d10069..e9ec663 100644 --- a/Lib/test/decimaltestdata/decQuad.decTest +++ b/Lib/test/decimaltestdata/decQuad.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- decQuad tests dectest: dqAbs diff --git a/Lib/test/decimaltestdata/decSingle.decTest b/Lib/test/decimaltestdata/decSingle.decTest index c661fe4..aae9b37 100644 --- a/Lib/test/decimaltestdata/decSingle.decTest +++ b/Lib/test/decimaltestdata/decSingle.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- decSingle tests dectest: dsBase diff --git a/Lib/test/decimaltestdata/divide.decTest b/Lib/test/decimaltestdata/divide.decTest index 1cb82b4..ae2bc08 100644 --- a/Lib/test/decimaltestdata/divide.decTest +++ b/Lib/test/decimaltestdata/divide.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 extended: 1 precision: 9 diff --git a/Lib/test/decimaltestdata/divideint.decTest b/Lib/test/decimaltestdata/divideint.decTest index dfa17ca..1c940f5 100644 --- a/Lib/test/decimaltestdata/divideint.decTest +++ b/Lib/test/decimaltestdata/divideint.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 extended: 1 precision: 9 diff --git a/Lib/test/decimaltestdata/dqAbs.decTest b/Lib/test/decimaltestdata/dqAbs.decTest index 01d1f30..df010ac 100644 --- a/Lib/test/decimaltestdata/dqAbs.decTest +++ b/Lib/test/decimaltestdata/dqAbs.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dqAdd.decTest b/Lib/test/decimaltestdata/dqAdd.decTest index 72238d3..256bc98 100644 --- a/Lib/test/decimaltestdata/dqAdd.decTest +++ b/Lib/test/decimaltestdata/dqAdd.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This set of tests are for decQuads only; all arguments are
-- representable in a decQuad
diff --git a/Lib/test/decimaltestdata/dqAnd.decTest b/Lib/test/decimaltestdata/dqAnd.decTest index be3fb34..e00d44d 100644 --- a/Lib/test/decimaltestdata/dqAnd.decTest +++ b/Lib/test/decimaltestdata/dqAnd.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dqBase.decTest b/Lib/test/decimaltestdata/dqBase.decTest index 6cf2f7f..3f2569b 100644 --- a/Lib/test/decimaltestdata/dqBase.decTest +++ b/Lib/test/decimaltestdata/dqBase.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This file tests base conversions from string to a decimal number
-- and back to a string (in Scientific form)
diff --git a/Lib/test/decimaltestdata/dqCanonical.decTest b/Lib/test/decimaltestdata/dqCanonical.decTest index a6b801a..e13c347 100644 --- a/Lib/test/decimaltestdata/dqCanonical.decTest +++ b/Lib/test/decimaltestdata/dqCanonical.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This file tests that copy operations leave uncanonical operands
-- unchanged, and vice versa
diff --git a/Lib/test/decimaltestdata/dqClass.decTest b/Lib/test/decimaltestdata/dqClass.decTest index 185fbfc..a4703f7 100644 --- a/Lib/test/decimaltestdata/dqClass.decTest +++ b/Lib/test/decimaltestdata/dqClass.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- [New 2006.11.27]
diff --git a/Lib/test/decimaltestdata/dqCompare.decTest b/Lib/test/decimaltestdata/dqCompare.decTest index 8947280..7fccdf1 100644 --- a/Lib/test/decimaltestdata/dqCompare.decTest +++ b/Lib/test/decimaltestdata/dqCompare.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Note that we cannot assume add/subtract tests cover paths adequately,
-- here, because the code might be quite different (comparison cannot
diff --git a/Lib/test/decimaltestdata/dqCompareSig.decTest b/Lib/test/decimaltestdata/dqCompareSig.decTest index 43833ea..36d5e9b 100644 --- a/Lib/test/decimaltestdata/dqCompareSig.decTest +++ b/Lib/test/decimaltestdata/dqCompareSig.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Note that we cannot assume add/subtract tests cover paths adequately,
-- here, because the code might be quite different (comparison cannot
diff --git a/Lib/test/decimaltestdata/dqCompareTotal.decTest b/Lib/test/decimaltestdata/dqCompareTotal.decTest index d4a7c5a..f5cec06 100644 --- a/Lib/test/decimaltestdata/dqCompareTotal.decTest +++ b/Lib/test/decimaltestdata/dqCompareTotal.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Note that we cannot assume add/subtract tests cover paths adequately,
-- here, because the code might be quite different (comparison cannot
diff --git a/Lib/test/decimaltestdata/dqCompareTotalMag.decTest b/Lib/test/decimaltestdata/dqCompareTotalMag.decTest index 9461d6b..76c1089 100644 --- a/Lib/test/decimaltestdata/dqCompareTotalMag.decTest +++ b/Lib/test/decimaltestdata/dqCompareTotalMag.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Note that we cannot assume add/subtract tests cover paths adequately,
-- here, because the code might be quite different (comparison cannot
diff --git a/Lib/test/decimaltestdata/dqCopy.decTest b/Lib/test/decimaltestdata/dqCopy.decTest index b833776..b768801 100644 --- a/Lib/test/decimaltestdata/dqCopy.decTest +++ b/Lib/test/decimaltestdata/dqCopy.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decQuads.
extended: 1
diff --git a/Lib/test/decimaltestdata/dqCopyAbs.decTest b/Lib/test/decimaltestdata/dqCopyAbs.decTest index 91f4a68..427e6dd 100644 --- a/Lib/test/decimaltestdata/dqCopyAbs.decTest +++ b/Lib/test/decimaltestdata/dqCopyAbs.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decQuads.
extended: 1
diff --git a/Lib/test/decimaltestdata/dqCopyNegate.decTest b/Lib/test/decimaltestdata/dqCopyNegate.decTest index 22ac89c..34a6f3c 100644 --- a/Lib/test/decimaltestdata/dqCopyNegate.decTest +++ b/Lib/test/decimaltestdata/dqCopyNegate.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decQuads.
extended: 1
diff --git a/Lib/test/decimaltestdata/dqCopySign.decTest b/Lib/test/decimaltestdata/dqCopySign.decTest index 8f275cd..902c937 100644 --- a/Lib/test/decimaltestdata/dqCopySign.decTest +++ b/Lib/test/decimaltestdata/dqCopySign.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decQuads.
extended: 1
diff --git a/Lib/test/decimaltestdata/dqDivide.decTest b/Lib/test/decimaltestdata/dqDivide.decTest index a84e1d0..1ea6d31 100644 --- a/Lib/test/decimaltestdata/dqDivide.decTest +++ b/Lib/test/decimaltestdata/dqDivide.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dqDivideInt.decTest b/Lib/test/decimaltestdata/dqDivideInt.decTest index 953c1e0..b5eec63 100644 --- a/Lib/test/decimaltestdata/dqDivideInt.decTest +++ b/Lib/test/decimaltestdata/dqDivideInt.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dqEncode.decTest b/Lib/test/decimaltestdata/dqEncode.decTest index ed3f328..fcb512b 100644 --- a/Lib/test/decimaltestdata/dqEncode.decTest +++ b/Lib/test/decimaltestdata/dqEncode.decTest @@ -18,7 +18,7 @@ -- mfc@uk.ibm.com --
------------------------------------------------------------------------
-- [Previously called decimal128.decTest]
-version: 2.56
+version: 2.57
-- This set of tests is for the sixteen-byte concrete representation.
-- Its characteristics are:
@@ -468,3 +468,10 @@ 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 37d7749..f68fdf9 100644 --- a/Lib/test/decimaltestdata/dqFMA.decTest +++ b/Lib/test/decimaltestdata/dqFMA.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
@@ -1754,6 +1754,31 @@ dqadd375087 fma 1 12398765432112345678945678 1E-33 -> 123987 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 94ba93c..19161c2 100644 --- a/Lib/test/decimaltestdata/dqInvert.decTest +++ b/Lib/test/decimaltestdata/dqInvert.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dqLogB.decTest b/Lib/test/decimaltestdata/dqLogB.decTest index baa6d1e..d6cf831 100644 --- a/Lib/test/decimaltestdata/dqLogB.decTest +++ b/Lib/test/decimaltestdata/dqLogB.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dqMax.decTest b/Lib/test/decimaltestdata/dqMax.decTest index a00ec1c..a3ba64c 100644 --- a/Lib/test/decimaltestdata/dqMax.decTest +++ b/Lib/test/decimaltestdata/dqMax.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- we assume that base comparison is tested in compare.decTest, so
-- these mainly cover special cases and rounding
diff --git a/Lib/test/decimaltestdata/dqMaxMag.decTest b/Lib/test/decimaltestdata/dqMaxMag.decTest index 53eb82c..01b2793 100644 --- a/Lib/test/decimaltestdata/dqMaxMag.decTest +++ b/Lib/test/decimaltestdata/dqMaxMag.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- we assume that base comparison is tested in compare.decTest, so
-- these mainly cover special cases and rounding
diff --git a/Lib/test/decimaltestdata/dqMin.decTest b/Lib/test/decimaltestdata/dqMin.decTest index 9e34694..1b82be2 100644 --- a/Lib/test/decimaltestdata/dqMin.decTest +++ b/Lib/test/decimaltestdata/dqMin.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- we assume that base comparison is tested in compare.decTest, so
-- these mainly cover special cases and rounding
diff --git a/Lib/test/decimaltestdata/dqMinMag.decTest b/Lib/test/decimaltestdata/dqMinMag.decTest index 733acfd..6d5e4b5 100644 --- a/Lib/test/decimaltestdata/dqMinMag.decTest +++ b/Lib/test/decimaltestdata/dqMinMag.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- we assume that base comparison is tested in compare.decTest, so
-- these mainly cover special cases and rounding
diff --git a/Lib/test/decimaltestdata/dqMinus.decTest b/Lib/test/decimaltestdata/dqMinus.decTest index 50ac85a..bf69938 100644 --- a/Lib/test/decimaltestdata/dqMinus.decTest +++ b/Lib/test/decimaltestdata/dqMinus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decQuads.
extended: 1
diff --git a/Lib/test/decimaltestdata/dqMultiply.decTest b/Lib/test/decimaltestdata/dqMultiply.decTest index a6f85e0..c87cc8f 100644 --- a/Lib/test/decimaltestdata/dqMultiply.decTest +++ b/Lib/test/decimaltestdata/dqMultiply.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This set of tests are for decQuads only; all arguments are
-- representable in a decQuad
@@ -456,18 +456,134 @@ dqmul908 multiply 9.999999999999999999999999999999999E-6143 0.0999999999999999 -- 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
-dqmul1001 multiply 130E-2 120E-2 -> 1.5600
-dqmul1002 multiply 130E-2 12E-1 -> 1.560
-dqmul1003 multiply 130E-2 1E0 -> 1.30
-dqmul1004 multiply 1E2 1E4 -> 1E+6
+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
-dqmul990 multiply 10 # -> NaN Invalid_operation
-dqmul991 multiply # 10 -> NaN Invalid_operation
+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 4880816..e1e3b06 100644 --- a/Lib/test/decimaltestdata/dqNextMinus.decTest +++ b/Lib/test/decimaltestdata/dqNextMinus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decQuads.
extended: 1
diff --git a/Lib/test/decimaltestdata/dqNextPlus.decTest b/Lib/test/decimaltestdata/dqNextPlus.decTest index 8c0ac45..973c8eb 100644 --- a/Lib/test/decimaltestdata/dqNextPlus.decTest +++ b/Lib/test/decimaltestdata/dqNextPlus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decQuads.
extended: 1
diff --git a/Lib/test/decimaltestdata/dqNextToward.decTest b/Lib/test/decimaltestdata/dqNextToward.decTest index e534951..0eb6770 100644 --- a/Lib/test/decimaltestdata/dqNextToward.decTest +++ b/Lib/test/decimaltestdata/dqNextToward.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decQuads.
extended: 1
diff --git a/Lib/test/decimaltestdata/dqOr.decTest b/Lib/test/decimaltestdata/dqOr.decTest index 60470ea..093edcb 100644 --- a/Lib/test/decimaltestdata/dqOr.decTest +++ b/Lib/test/decimaltestdata/dqOr.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dqPlus.decTest b/Lib/test/decimaltestdata/dqPlus.decTest index 5dc5a68..ad5b7be 100644 --- a/Lib/test/decimaltestdata/dqPlus.decTest +++ b/Lib/test/decimaltestdata/dqPlus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decQuads.
extended: 1
diff --git a/Lib/test/decimaltestdata/dqQuantize.decTest b/Lib/test/decimaltestdata/dqQuantize.decTest index aa8cf2e..4c3e1ea 100644 --- a/Lib/test/decimaltestdata/dqQuantize.decTest +++ b/Lib/test/decimaltestdata/dqQuantize.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Most of the tests here assume a "regular pattern", where the
-- sign and coefficient are +1.
diff --git a/Lib/test/decimaltestdata/dqReduce.decTest b/Lib/test/decimaltestdata/dqReduce.decTest index 183e9dc..c069040 100644 --- a/Lib/test/decimaltestdata/dqReduce.decTest +++ b/Lib/test/decimaltestdata/dqReduce.decTest @@ -18,7 +18,7 @@ -- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dqRemainder.decTest b/Lib/test/decimaltestdata/dqRemainder.decTest index e30fde7..14c358c 100644 --- a/Lib/test/decimaltestdata/dqRemainder.decTest +++ b/Lib/test/decimaltestdata/dqRemainder.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
@@ -580,6 +580,17 @@ 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 b62b79f..9074ec4 100644 --- a/Lib/test/decimaltestdata/dqRemainderNear.decTest +++ b/Lib/test/decimaltestdata/dqRemainderNear.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
@@ -612,6 +612,19 @@ 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 f21813c..671cd95 100644 --- a/Lib/test/decimaltestdata/dqRotate.decTest +++ b/Lib/test/decimaltestdata/dqRotate.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dqSameQuantum.decTest b/Lib/test/decimaltestdata/dqSameQuantum.decTest index e7264cb..acf7266 100644 --- a/Lib/test/decimaltestdata/dqSameQuantum.decTest +++ b/Lib/test/decimaltestdata/dqSameQuantum.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- All operands and results are decQuads.
extended: 1
diff --git a/Lib/test/decimaltestdata/dqScaleB.decTest b/Lib/test/decimaltestdata/dqScaleB.decTest index 88a3f9d..7355cf0 100644 --- a/Lib/test/decimaltestdata/dqScaleB.decTest +++ b/Lib/test/decimaltestdata/dqScaleB.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dqShift.decTest b/Lib/test/decimaltestdata/dqShift.decTest index e728ec5..33df91f 100644 --- a/Lib/test/decimaltestdata/dqShift.decTest +++ b/Lib/test/decimaltestdata/dqShift.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dqSubtract.decTest b/Lib/test/decimaltestdata/dqSubtract.decTest index 923742c..d2df184 100644 --- a/Lib/test/decimaltestdata/dqSubtract.decTest +++ b/Lib/test/decimaltestdata/dqSubtract.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This set of tests are for decQuads only; all arguments are
-- representable in a decQuad
diff --git a/Lib/test/decimaltestdata/dqToIntegral.decTest b/Lib/test/decimaltestdata/dqToIntegral.decTest index ac50a4a..449dead 100644 --- a/Lib/test/decimaltestdata/dqToIntegral.decTest +++ b/Lib/test/decimaltestdata/dqToIntegral.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This set of tests tests the extended specification 'round-to-integral
-- value-exact' operations (from IEEE 854, later modified in 754r).
diff --git a/Lib/test/decimaltestdata/dqXor.decTest b/Lib/test/decimaltestdata/dqXor.decTest index 61bdbe2..d9e9af6 100644 --- a/Lib/test/decimaltestdata/dqXor.decTest +++ b/Lib/test/decimaltestdata/dqXor.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
clamp: 1
diff --git a/Lib/test/decimaltestdata/dsBase.decTest b/Lib/test/decimaltestdata/dsBase.decTest index d0632fd..e2fb4ba 100644 --- a/Lib/test/decimaltestdata/dsBase.decTest +++ b/Lib/test/decimaltestdata/dsBase.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This file tests base conversions from string to a decimal number
-- and back to a string (in Scientific form)
@@ -1058,4 +1058,5 @@ 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 185ddc7..7e72d4b 100644 --- a/Lib/test/decimaltestdata/dsEncode.decTest +++ b/Lib/test/decimaltestdata/dsEncode.decTest @@ -18,7 +18,7 @@ -- mfc@uk.ibm.com --
------------------------------------------------------------------------
-- [Previously called decimal32.decTest]
-version: 2.56
+version: 2.57
-- This set of tests is for the four-byte concrete representation.
-- Its characteristics are:
@@ -367,3 +367,6 @@ 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 c07ed5a..97256e4 100644 --- a/Lib/test/decimaltestdata/exp.decTest +++ b/Lib/test/decimaltestdata/exp.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- Tests of the exponential funtion. Currently all testcases here
-- show results which are correctly rounded (within <= 0.5 ulp).
diff --git a/Lib/test/decimaltestdata/fma.decTest b/Lib/test/decimaltestdata/fma.decTest index aa4c0ba..d7caa26 100644 --- a/Lib/test/decimaltestdata/fma.decTest +++ b/Lib/test/decimaltestdata/fma.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/inexact.decTest b/Lib/test/decimaltestdata/inexact.decTest index b61c85a..896e6c8 100644 --- a/Lib/test/decimaltestdata/inexact.decTest +++ b/Lib/test/decimaltestdata/inexact.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 extended: 1 precision: 9 diff --git a/Lib/test/decimaltestdata/invert.decTest b/Lib/test/decimaltestdata/invert.decTest index 19fdeeb..7bccb1f 100644 --- a/Lib/test/decimaltestdata/invert.decTest +++ b/Lib/test/decimaltestdata/invert.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/ln.decTest b/Lib/test/decimaltestdata/ln.decTest index 44ae4d2..16e247e 100644 --- a/Lib/test/decimaltestdata/ln.decTest +++ b/Lib/test/decimaltestdata/ln.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 16
diff --git a/Lib/test/decimaltestdata/log10.decTest b/Lib/test/decimaltestdata/log10.decTest index 9841acb..bb033a8 100644 --- a/Lib/test/decimaltestdata/log10.decTest +++ b/Lib/test/decimaltestdata/log10.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This emphasises the testing of notable cases, as they will often
-- have unusual paths (especially the 10**n results).
diff --git a/Lib/test/decimaltestdata/logb.decTest b/Lib/test/decimaltestdata/logb.decTest index 577f7a4..a672206 100644 --- a/Lib/test/decimaltestdata/logb.decTest +++ b/Lib/test/decimaltestdata/logb.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This emphasises the testing of notable cases, as they will often
-- have unusual paths (especially the 10**n results).
diff --git a/Lib/test/decimaltestdata/max.decTest b/Lib/test/decimaltestdata/max.decTest index 88d0b5e..d7a6a94 100644 --- a/Lib/test/decimaltestdata/max.decTest +++ b/Lib/test/decimaltestdata/max.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- we assume that base comparison is tested in compare.decTest, so -- these mainly cover special cases and rounding diff --git a/Lib/test/decimaltestdata/maxmag.decTest b/Lib/test/decimaltestdata/maxmag.decTest index b14d015..0129766 100644 --- a/Lib/test/decimaltestdata/maxmag.decTest +++ b/Lib/test/decimaltestdata/maxmag.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- we assume that base comparison is tested in compare.decTest, so
-- these mainly cover special cases and rounding
diff --git a/Lib/test/decimaltestdata/min.decTest b/Lib/test/decimaltestdata/min.decTest index 345e3eb..b695079 100644 --- a/Lib/test/decimaltestdata/min.decTest +++ b/Lib/test/decimaltestdata/min.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- we assume that base comparison is tested in compare.decTest, so -- these mainly cover special cases and rounding diff --git a/Lib/test/decimaltestdata/minmag.decTest b/Lib/test/decimaltestdata/minmag.decTest index fa9d927..547ccff 100644 --- a/Lib/test/decimaltestdata/minmag.decTest +++ b/Lib/test/decimaltestdata/minmag.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- we assume that base comparison is tested in compare.decTest, so
-- these mainly cover special cases and rounding
diff --git a/Lib/test/decimaltestdata/minus.decTest b/Lib/test/decimaltestdata/minus.decTest index e9afc3a..f911286 100644 --- a/Lib/test/decimaltestdata/minus.decTest +++ b/Lib/test/decimaltestdata/minus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- This set of tests primarily tests the existence of the operator. -- Subtraction, rounding, and more overflows are tested elsewhere. diff --git a/Lib/test/decimaltestdata/multiply.decTest b/Lib/test/decimaltestdata/multiply.decTest index 71f591a..a6c7ebe 100644 --- a/Lib/test/decimaltestdata/multiply.decTest +++ b/Lib/test/decimaltestdata/multiply.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 extended: 1 precision: 9 diff --git a/Lib/test/decimaltestdata/nextminus.decTest b/Lib/test/decimaltestdata/nextminus.decTest index 200580d..be33158 100644 --- a/Lib/test/decimaltestdata/nextminus.decTest +++ b/Lib/test/decimaltestdata/nextminus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/nextplus.decTest b/Lib/test/decimaltestdata/nextplus.decTest index 01815ee..6cee16a 100644 --- a/Lib/test/decimaltestdata/nextplus.decTest +++ b/Lib/test/decimaltestdata/nextplus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/nexttoward.decTest b/Lib/test/decimaltestdata/nexttoward.decTest index cb60f57..aa1891a 100644 --- a/Lib/test/decimaltestdata/nexttoward.decTest +++ b/Lib/test/decimaltestdata/nexttoward.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/or.decTest b/Lib/test/decimaltestdata/or.decTest index 928939e..ace901b 100644 --- a/Lib/test/decimaltestdata/or.decTest +++ b/Lib/test/decimaltestdata/or.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/plus.decTest b/Lib/test/decimaltestdata/plus.decTest index 9af4c0e..1df3dfe 100644 --- a/Lib/test/decimaltestdata/plus.decTest +++ b/Lib/test/decimaltestdata/plus.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- This set of tests primarily tests the existence of the operator. -- Addition and rounding, and most overflows, are tested elsewhere. diff --git a/Lib/test/decimaltestdata/power.decTest b/Lib/test/decimaltestdata/power.decTest index 78c1e07..69e8644 100644 --- a/Lib/test/decimaltestdata/power.decTest +++ b/Lib/test/decimaltestdata/power.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- In addition to the power operator testcases here, see also the file -- powersqrt.decTest which includes all the tests from diff --git a/Lib/test/decimaltestdata/powersqrt.decTest b/Lib/test/decimaltestdata/powersqrt.decTest index 36e5cbb..6f79f6c 100644 --- a/Lib/test/decimaltestdata/powersqrt.decTest +++ b/Lib/test/decimaltestdata/powersqrt.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- These testcases are taken from squareroot.decTest but are
-- evaluated using the power operator. The differences in results
diff --git a/Lib/test/decimaltestdata/quantize.decTest b/Lib/test/decimaltestdata/quantize.decTest index a60f1bf..1e5511f 100644 --- a/Lib/test/decimaltestdata/quantize.decTest +++ b/Lib/test/decimaltestdata/quantize.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- Most of the tests here assume a "regular pattern", where the -- sign and coefficient are +1. diff --git a/Lib/test/decimaltestdata/randomBound32.decTest b/Lib/test/decimaltestdata/randomBound32.decTest index 7f115ad..0d5881d 100644 --- a/Lib/test/decimaltestdata/randomBound32.decTest +++ b/Lib/test/decimaltestdata/randomBound32.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.55 +version: 2.57 -- These testcases test calculations at precisions 31, 32, and 33, to -- exercise the boundaries around 2**5 diff --git a/Lib/test/decimaltestdata/randoms.decTest b/Lib/test/decimaltestdata/randoms.decTest index 1529aec..a03b8d5 100644 --- a/Lib/test/decimaltestdata/randoms.decTest +++ b/Lib/test/decimaltestdata/randoms.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 extended: 1 maxexponent: 999999999 diff --git a/Lib/test/decimaltestdata/reduce.decTest b/Lib/test/decimaltestdata/reduce.decTest index ddce0c9..189a687 100644 --- a/Lib/test/decimaltestdata/reduce.decTest +++ b/Lib/test/decimaltestdata/reduce.decTest @@ -19,7 +19,7 @@ ------------------------------------------------------------------------ -- [This used to be called normalize.] -version: 2.56 +version: 2.57 extended: 1 precision: 9 diff --git a/Lib/test/decimaltestdata/remainder.decTest b/Lib/test/decimaltestdata/remainder.decTest index 4c92d0c..1a51c26 100644 --- a/Lib/test/decimaltestdata/remainder.decTest +++ b/Lib/test/decimaltestdata/remainder.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 extended: 1 precision: 9 diff --git a/Lib/test/decimaltestdata/remainderNear.decTest b/Lib/test/decimaltestdata/remainderNear.decTest index cfca91b..fdc1bd8 100644 --- a/Lib/test/decimaltestdata/remainderNear.decTest +++ b/Lib/test/decimaltestdata/remainderNear.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.55 +version: 2.57 extended: 1 precision: 9 @@ -413,6 +413,18 @@ rmnx605 remaindernear 7.7 8 -> -0.3 rmnx606 remaindernear 31.5 3 -> 1.5 -- i=10 rmnx607 remaindernear 34.5 3 -> -1.5 -- i=11 +-- zero signs +rmnx650 remaindernear 1 1 -> 0 +rmnx651 remaindernear -1 1 -> -0 +rmnx652 remaindernear 1 -1 -> 0 +rmnx653 remaindernear -1 -1 -> -0 +rmnx654 remaindernear 0 1 -> 0 +rmnx655 remaindernear -0 1 -> -0 +rmnx656 remaindernear 0 -1 -> 0 +rmnx657 remaindernear -0 -1 -> -0 +rmnx658 remaindernear 0.00 1 -> 0.00 +rmnx659 remaindernear -0.00 1 -> -0.00 + -- Specials rmnx680 remaindernear Inf -Inf -> NaN Invalid_operation rmnx681 remaindernear Inf -1000 -> NaN Invalid_operation diff --git a/Lib/test/decimaltestdata/rescale.decTest b/Lib/test/decimaltestdata/rescale.decTest index 30597db..882f570 100644 --- a/Lib/test/decimaltestdata/rescale.decTest +++ b/Lib/test/decimaltestdata/rescale.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- [obsolete] Quantize.decTest has the improved version diff --git a/Lib/test/decimaltestdata/rotate.decTest b/Lib/test/decimaltestdata/rotate.decTest index c5ced59..32dbd53 100644 --- a/Lib/test/decimaltestdata/rotate.decTest +++ b/Lib/test/decimaltestdata/rotate.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/rounding.decTest b/Lib/test/decimaltestdata/rounding.decTest index d24fbfb..82ca1b0 100644 --- a/Lib/test/decimaltestdata/rounding.decTest +++ b/Lib/test/decimaltestdata/rounding.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- These tests require that implementations take account of residues in -- order to get correct results for some rounding modes. Rather than diff --git a/Lib/test/decimaltestdata/samequantum.decTest b/Lib/test/decimaltestdata/samequantum.decTest index 0b1efff..3fa6cff 100644 --- a/Lib/test/decimaltestdata/samequantum.decTest +++ b/Lib/test/decimaltestdata/samequantum.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 extended: 1 precision: 9 diff --git a/Lib/test/decimaltestdata/scaleb.decTest b/Lib/test/decimaltestdata/scaleb.decTest index 0761dea..e77d938 100644 --- a/Lib/test/decimaltestdata/scaleb.decTest +++ b/Lib/test/decimaltestdata/scaleb.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/shift.decTest b/Lib/test/decimaltestdata/shift.decTest index c2a40cc..397024e 100644 --- a/Lib/test/decimaltestdata/shift.decTest +++ b/Lib/test/decimaltestdata/shift.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/decimaltestdata/squareroot.decTest b/Lib/test/decimaltestdata/squareroot.decTest index 2ccff5a..8d7b26e 100644 --- a/Lib/test/decimaltestdata/squareroot.decTest +++ b/Lib/test/decimaltestdata/squareroot.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 extended: 1 precision: 9 diff --git a/Lib/test/decimaltestdata/subtract.decTest b/Lib/test/decimaltestdata/subtract.decTest index 338a09c..a1eca31 100644 --- a/Lib/test/decimaltestdata/subtract.decTest +++ b/Lib/test/decimaltestdata/subtract.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 extended: 1 precision: 9 diff --git a/Lib/test/decimaltestdata/testall.decTest b/Lib/test/decimaltestdata/testall.decTest index 1cbc20e..673aaa4 100644 --- a/Lib/test/decimaltestdata/testall.decTest +++ b/Lib/test/decimaltestdata/testall.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- core tests (using Extended: 1) -------------------------------------- dectest: base diff --git a/Lib/test/decimaltestdata/tointegral.decTest b/Lib/test/decimaltestdata/tointegral.decTest index ad25e6b..340515c 100644 --- a/Lib/test/decimaltestdata/tointegral.decTest +++ b/Lib/test/decimaltestdata/tointegral.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK -- -- mfc@uk.ibm.com -- ------------------------------------------------------------------------ -version: 2.56 +version: 2.57 -- This set of tests tests the extended specification 'round-to-integral -- value' operation (from IEEE 854, later modified in 754r). diff --git a/Lib/test/decimaltestdata/tointegralx.decTest b/Lib/test/decimaltestdata/tointegralx.decTest index d9bc9f3..381216d 100644 --- a/Lib/test/decimaltestdata/tointegralx.decTest +++ b/Lib/test/decimaltestdata/tointegralx.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
-- This set of tests tests the extended specification 'round-to-integral
-- value' operation (from IEEE 854, later modified in 754r).
diff --git a/Lib/test/decimaltestdata/xor.decTest b/Lib/test/decimaltestdata/xor.decTest index 2ac1b37..1f3b03b 100644 --- a/Lib/test/decimaltestdata/xor.decTest +++ b/Lib/test/decimaltestdata/xor.decTest @@ -17,7 +17,7 @@ -- IBM UK, PO Box 31, Birmingham Road, Warwick CV34 5JL, UK --
-- mfc@uk.ibm.com --
------------------------------------------------------------------------
-version: 2.56
+version: 2.57
extended: 1
precision: 9
diff --git a/Lib/test/test_decimal.py b/Lib/test/test_decimal.py index 98b9479..3c64e64 100644 --- a/Lib/test/test_decimal.py +++ b/Lib/test/test_decimal.py @@ -464,6 +464,7 @@ class DecimalExplicitConstructionTest(unittest.TestCase): self.assertRaises(ValueError, Decimal, (1, (4, 3, 4, None, 1), 2) ) self.assertRaises(ValueError, Decimal, (1, (4, -3, 4, 9, 1), 2) ) self.assertRaises(ValueError, Decimal, (1, (4, 10, 4, 9, 1), 2) ) + self.assertRaises(ValueError, Decimal, (1, (4, 3, 4, 'a', 1), 2) ) def test_explicit_from_Decimal(self): diff --git a/Lib/test/test_doctest.py b/Lib/test/test_doctest.py index 3b89097..02034b4 100644 --- a/Lib/test/test_doctest.py +++ b/Lib/test/test_doctest.py @@ -1916,6 +1916,7 @@ def test_DocFileSuite(): provided. >>> import unittest, pkgutil, test + >>> added_loader = False >>> if not hasattr(test, '__loader__'): ... test.__loader__ = pkgutil.get_loader(test) ... added_loader = True diff --git a/Lib/test/test_funcattrs.py b/Lib/test/test_funcattrs.py index bd9caff..b9b2e6e 100644 --- a/Lib/test/test_funcattrs.py +++ b/Lib/test/test_funcattrs.py @@ -215,6 +215,17 @@ def test_func_closure(): verify(c[0].__class__.__name__ == "cell") # don't have a type object handy cantset(f, "__closure__", c) +def test_empty_cell(): + def f(): print(a) + try: + f.__closure__[0].cell_contents + except ValueError: + pass + else: + raise TestFailed("shouldn't be able to read an empty cell") + + a = 12 + def test_func_doc(): def f(): pass verify(f.__doc__ is None) @@ -339,6 +350,7 @@ def test_im_name(): def testmore(): test_func_closure() + test_empty_cell() test_func_doc() test_func_globals() test_func_name() diff --git a/Lib/trace.py b/Lib/trace.py index 645517a..f6da026 100644 --- a/Lib/trace.py +++ b/Lib/trace.py @@ -282,6 +282,8 @@ class CoverageResults: # skip some "files" we don't care about... if filename == "<string>": continue + if filename.startswith("<doctest "): + continue if filename.endswith((".pyc", ".pyo")): filename = filename[:-1] |