Add Math<decimal> support.
authorJonathan Pryor <jonpryor@vt.edu>
Mon, 14 Jun 2010 13:45:50 +0000 (09:45 -0400)
committerJonathan Pryor <jonpryor@vt.edu>
Mon, 14 Jun 2010 13:45:50 +0000 (09:45 -0400)
commite6a984d2588d5ad0a19f9fd4a7626d6b54990188
tree230aefd9c14c91794b34e5728e96b9075d72e0be
parent61d7d1f60c83803409e0d4df805f90c11d6faeda
Add Math<decimal> support.

Supporting decimal requires changing some of the existing "feature" checks, as
they make assumptions that don't hold true for decimal.

For example, MathContract<T> assumed that `T.MaxValue+1` would only throw for
integral types, yet it also throws with decimal, and that types which support
fractions like 0.5 must be non-integral, and these two clearly conflict with
each other for decimal (decimal can express 0.5, yet throws with
decimal.MaxValue+1).

Thus:
- Remove the Math<T>.IsIntegral property.
- Add Math<T>.IsFractional (i.e. can express fractions)
- Add Math<T>.IsFloatingPoint (i.e. can express infinity, NaN, etc.)
- Add Math<T>.IsTwosComplement (i.e. does Negate(T.MinValue) throw;
  negating decimal.MinValue does not throw, while it does for int)
- Add a MathFeatures enum so that we can easily document all of these
  "features" in one place.  Math<T>.Features is implement in terms
  of the existing Is* feature checks.
src/Cadenza.Core/Cadenza.Numerics/ExpressionMath.cs
src/Cadenza.Core/Documentation/en/Cadenza.Numerics/ExpressionMath`1.xml
src/Cadenza/Cadenza.Numerics/Math.cs
src/Cadenza/Documentation/en/Cadenza.Numerics/Math`1.xml
src/Cadenza/Documentation/en/index.xml
src/Cadenza/Test/Cadenza.Numerics/MathContract.cs
src/Cadenza/Test/Cadenza.Numerics/MathTest.cs