- public void TestConstructSingleRounding()\r
- {\r
- decimal d;\r
-\r
- d = new Decimal(1765.2356f);\r
- Assert("01", d == 1765.236m);\r
-\r
- d = new Decimal(1765.23554f);\r
- Assert("failed banker's rule rounding test 1", d == 1765.236m);\r
-\r
- d = new Decimal(1765.2354f);\r
- Assert("03", d == 1765.235m);\r
-\r
- d = new Decimal(1765.2346f);\r
- Assert("04", d == 1765.235m);\r
-\r
- d = new Decimal(1765.2344f);\r
- Assert("05", d == 1765.234m);\r
-\r
- d = new Decimal(3.7652356e10f);\r
- Assert("12", d == 37652360000m);\r
-\r
- d = new Decimal(3.7652356e20f);\r
- Assert("13", d == 376523600000000000000m);\r
-\r
- d = new Decimal(3.76523554e20f);\r
- Assert("failed banker's rule rounding test 5", d == 376523600000000000000m);\r
-\r
- d = new Decimal(3.7652352e20f);\r
- Assert("15", d == 376523500000000000000m);\r
-\r
- d = new Decimal(3.7652348e20f);\r
- Assert("16", d == 376523500000000000000m);\r
-\r
- d = new Decimal(3.76523454e20f);\r
- Assert("failed banker's rule rounding test 6", d == 376523400000000000000m);\r
-\r
- d = new Decimal(3.7652342e20f);\r
- Assert("18", d == 376523400000000000000m);\r
- }\r
-\r
- public void TestConstructDouble()\r
- {\r
- Decimal d;\r
-\r
- d = new Decimal(0.0);\r
- Assert((decimal)d == 0m);\r
-\r
- d = new Decimal(1.0);\r
- Assert((decimal)d == 1m);\r
- Assert(1.0 == (double)d);\r
-\r
- d = new Decimal(-1.2345678901234);\r
- Assert((decimal)d == -1.2345678901234m);\r
- Assert(-1.2345678901234 == (double)d);\r
-\r
- d = new Decimal(1.2345678901234);\r
- Assert((decimal)d == 1.2345678901234m);\r
-\r
- d = new Decimal(1.2345678901234e8);\r
- Assert((decimal)d == 123456789.01234m);\r
- Assert(1.2345678901234e8 == (double)d);\r
-\r
- d = new Decimal(1.2345678901234e16);\r
- Assert((decimal)d == 12345678901234000m);\r
- Assert(1.2345678901234e16 == (double)d);\r
-\r
- d = new Decimal(1.2345678901234e24);\r
- Assert((decimal)d == 1234567890123400000000000m);\r
- Assert(1.2345678901234e24 == (double)d);\r
-\r
- d = new Decimal(1.2345678901234e28);\r
- Assert((decimal)d == 1.2345678901234e28m);\r
- Assert(1.2345678901234e28 == (double)d);\r
-\r
- d = new Decimal(7.2345678901234e28);\r
- Assert((decimal)d == 7.2345678901234e28m);\r
- Assert(new Decimal((double)d) == d);\r
-\r
- d = new Decimal(1.2345678901234e-8);\r
- Assert((decimal)d == 1.2345678901234e-8m);\r
-\r
- d = new Decimal(1.2345678901234e-14);\r
- Assert((decimal)d == 1.2345678901234e-14m);\r
- Assert(1.2345678901234e-14 == (double)d);\r
-\r
- d = new Decimal(1.2342278901234e-25);\r
- Assert((decimal)d == 1.234e-25m);\r
-\r
- // test exceptions\r
- try\r
- {\r
- d = new Decimal(8e28);\r
- Fail();\r
- } \r
- catch (OverflowException) \r
- {\r
- }\r
-\r
- try\r
- {\r
- d = new Decimal(8e48);\r
- Fail();\r
- } \r
- catch (OverflowException) \r
- {\r
- }\r
-\r
- try\r
- {\r
- d = new Decimal(Double.NaN);\r
- Fail();\r
- } \r
- catch (OverflowException) \r
- {\r
- }\r
-\r
- try\r
- {\r
- d = new Decimal(Double.PositiveInfinity);\r
- Fail();\r
- } \r
- catch (OverflowException) \r
- {\r
- }\r
- }\r
-\r
- public void TestConstructDoubleRound()\r
- {\r
- decimal d;\r
- int TestNum = 1;\r
- \r
- try {\r
- d = new Decimal(1765.231234567857);\r
- AssertEquals("A01", 1765.23123456786m, d);\r
-\r
- TestNum++;\r
- d = new Decimal(1765.2312345678554);\r
- AssertEquals("A02, failed banker's rule rounding test 1", 1765.23123456786m, d);\r
- AssertEquals("A03", 1765.23123456786, (double)d);\r
-\r
- TestNum++;\r
- d = new Decimal(1765.231234567853);\r
- Assert(d == 1765.23123456785m);\r
-\r
- TestNum++;\r
- d = new Decimal(1765.231234567847);\r
- Assert(d == 1765.23123456785m);\r
-\r
- TestNum++;\r
- d = new Decimal(1765.231234567843);\r
- Assert(d == 1765.23123456784m);\r
-\r
- TestNum++;\r
- d = new Decimal(1.765231234567857e-9);\r
- Assert(d == 1.76523123456786e-9m);\r
-\r
- TestNum++;\r
- d = new Decimal(1.7652312345678554e-9);\r
- Assert("failed banker's rule rounding test 3", d == 1.76523123456786e-9m);\r
-\r
- TestNum++;\r
- d = new Decimal(1.765231234567853e-9);\r
- Assert(d == 1.76523123456785e-9m);\r
-\r
- TestNum++;\r
- d = new Decimal(1.765231234567857e+24);\r
- Assert(d == 1.76523123456786e+24m);\r
-\r
- TestNum++;\r
- d = new Decimal(1.7652312345678554e+24);\r
- Assert("failed banker's rule rounding test 4", d == 1.76523123456786e+24m);\r
-\r
- TestNum++;\r
- d = new Decimal(1.765231234567853e+24);\r
- Assert(d == 1.76523123456785e+24m);\r
-\r
- TestNum++;\r
- d = new Decimal(1765.2312345678454);\r
- Assert(d == 1765.23123456785m);\r
- }\r
- catch (Exception e) {\r
- Fail("At TestNum = " + TestNum + " unexpected exception. e = " + e);\r
- }\r
- }\r
-\r
- public void TestNegate()\r
- {\r
- decimal d;\r
-\r
- d = new Decimal(12345678);\r
- Assert((decimal)Decimal.Negate(d) == -12345678m);\r
- }\r
-\r
- public void TestPartConstruct()\r
- {\r
- decimal d;\r
- \r
- d = new Decimal(parts0);\r
- Assert(d == 0);\r
-\r
- d = new Decimal(parts1);\r
- Assert(d == 1);\r
-\r
- d = new Decimal(parts2);\r
- Assert(d == 4294967296m);\r
-\r
- d = new Decimal(parts3);\r
- Assert(d == 18446744073709551616m);\r
-\r
- d = new Decimal(parts4);\r
- Assert(d == 0m);\r
-\r
- d = new Decimal(parts5);\r
- Assert(d == 18446744078004518913m);\r
- \r
- d = new Decimal(partsMaxValue);\r
- Assert(d == Decimal.MaxValue);\r
- \r
- d = new Decimal(partsMinValue);\r
- Assert(d == Decimal.MinValue);\r
-\r
- d = new Decimal(parts6);\r
- int[] erg = Decimal.GetBits(d);\r
- for (int i = 0; i < 4; i++) \r
- {\r
- Assert(erg[i] == parts6[i]); \r
- }\r
- }\r
-\r
- public void TestFloorTruncate()\r
- {\r
- decimal[,] dtab = {\r
- {0m, 0m, 0m}, {1m, 1m, 1m}, {-1m, -1m, -1m}, {1.1m, 1m, 1m}, \r
- {-1.000000000001m, -2m, -1m}, {12345.67890m,12345m,12345m},\r
- {-123456789012345.67890m, -123456789012346m, -123456789012345m},\r
- {Decimal.MaxValue, Decimal.MaxValue, Decimal.MaxValue},\r
- {Decimal.MinValue, Decimal.MinValue, Decimal.MinValue},\r
- {6.999999999m, 6m, 6m}, {-6.999999999m, -7m, -6m}, \r
- {0.00001m, 0m, 0m}, {-0.00001m, -1m, 0m}\r
- };\r
-\r
- decimal d;\r
- \r
- for (int i = 0; i < dtab.GetLength(0); i++)\r
- {\r
- d = Decimal.Floor(dtab[i,0]);\r
- if (d != dtab[i,1]) \r
- {\r
- Fail("Floor: Floor(" + dtab[i,0] + ") != " + d);\r
- }\r
- d = Decimal.Truncate(dtab[i,0]);\r
- if (d != dtab[i,2]) \r
- {\r
- Fail("Truncate: Truncate(" + dtab[i,0] + ") != " + d);\r
- }\r
- }\r
- }\r
-\r
- [Test]\r
- public void Truncate () \r
- {\r
- decimal dd = 249.9m;\r
- decimal dt = Decimal.Truncate (dd);\r
- AssertEquals ("Original", 249.9m, dd);\r
- AssertEquals ("Truncate", 249m, dt);\r
- AssertEquals ("Cast-Byte", 249, (byte)dd);\r
- AssertEquals ("Cast-Char", 249, (char)dd);\r
- AssertEquals ("Cast-Int16", 249, (short)dd);\r
- AssertEquals ("Cast-UInt16", 249, (ushort)dd);\r
- AssertEquals ("Cast-Int32", 249, (int)dd);\r
- AssertEquals ("Cast-UInt32", 249, (uint)dd);\r
- AssertEquals ("Cast-Int64", 249, (long)dd);\r
- AssertEquals ("Cast-UInt64", 249, (ulong)dd);\r
- }\r
-\r
- public void TestRound()\r
- {\r
- decimal[,] dtab = { \r
- {1m, 0, 1m}, {1.234567890m, 1, 1.2m}, \r
- {1.234567890m, 2, 1.23m}, {1.23450000001m, 3, 1.235m}, \r
- {1.2355m, 3, 1.236m}, \r
- {1.234567890m, 4, 1.2346m}, {1.23567890m, 2, 1.24m}, \r
- {47893764694.4578563236436621m, 7, 47893764694.4578563m},\r
- {-47893764694.4578563236436621m, 9, -47893764694.457856324m},\r
- {-47893764694.4578m, 5, -47893764694.4578m}\r
- };\r
-\r
- decimal d;\r
- \r
- for (int i = 0; i < dtab.GetLength(0); i++)\r
- {\r
- d = Decimal.Round(dtab[i,0], (int)dtab[i,1]);\r
- if (d != dtab[i,2]) \r
- {\r
- Fail("Round: Round(" + dtab[i,0] + "," + (int)dtab[i,1] + ") != " + d);\r
- }\r
- }\r
- }\r
- \r
- public void TestRoundFailures ()\r
- {\r
- decimal[,] dtab = { \r
- {1.2345m, 3, 1.234m} \r
- };\r
-\r
- decimal d;\r
- \r
- for (int i = 0; i < dtab.GetLength(0); i++)\r
- {\r
- d = Decimal.Round(dtab[i,0], (int)dtab[i,1]);\r
- if (d != dtab[i,2]) \r
- {\r
- Fail("FailRound: Round(" + dtab[i,0] + "," + (int)dtab[i,1] + ") != " + d);\r
- }\r
- }\r
- }\r
-\r
- [Test]\r
- public void ParseInt64 () \r
- {\r
- long max = Int64.MaxValue;\r
- Decimal dmax = Decimal.Parse (max.ToString ());\r
- AssertEquals ("Int64.MaxValue", Int64.MaxValue, Decimal.ToInt64 (dmax));\r
-\r
- long min = Int64.MinValue;\r
- Decimal dmin = Decimal.Parse (min.ToString ());\r
- AssertEquals ("Int64.MinValue", Int64.MinValue, Decimal.ToInt64 (dmin));\r
-\r
- dmax += 1.1m;\r
- dmax = Decimal.Parse (dmax.ToString ());\r
- AssertEquals ("Int64.MaxValue+1.1", Int64.MaxValue, Decimal.ToInt64 (dmax - 1.1m));\r
-\r
- dmin -= 1.1m;\r
- dmin = Decimal.Parse (dmin.ToString ());\r
- AssertEquals ("Int64.MinValue-1.1", Int64.MinValue, Decimal.ToInt64 (dmin + 1.1m));\r
- }\r
-\r
- [Test]\r
- public void ToByte () \r
- {\r
- Decimal d = 254.9m;\r
- AssertEquals ("Decimal.ToByte", 254, Decimal.ToByte (d));\r
- AssertEquals ("Convert.ToByte", 255, Convert.ToByte (d));\r
- AssertEquals ("IConvertible.ToByte", 255, (d as IConvertible).ToByte (null));\r
- }\r
-\r
- [Test]\r
- public void ToSByte () \r
- {\r
- Decimal d = 126.9m;\r
- AssertEquals ("Decimal.ToSByte", 126, Decimal.ToSByte (d));\r
- AssertEquals ("Convert.ToSByte", 127, Convert.ToSByte (d));\r
- AssertEquals ("IConvertible.ToSByte", 127, (d as IConvertible).ToSByte (null));\r
- d = -d;\r
- AssertEquals ("-Decimal.ToSByte", -126, Decimal.ToSByte (d));\r
- AssertEquals ("-Convert.ToSByte", -127, Convert.ToSByte (d));\r
- AssertEquals ("-IConvertible.ToSByte", -127, (d as IConvertible).ToSByte (null));\r
- }\r
-\r
- [Test]\r
- public void ToInt16 () \r
- {\r
- Decimal d = 254.9m;\r
- AssertEquals ("Decimal.ToInt16", 254, Decimal.ToInt16 (d));\r
- AssertEquals ("Convert.ToInt16", 255, Convert.ToInt16 (d));\r
- AssertEquals ("IConvertible.ToInt16", 255, (d as IConvertible).ToInt16 (null));\r
- d = -d;\r
- AssertEquals ("-Decimal.ToInt16", -254, Decimal.ToInt16 (d));\r
- AssertEquals ("-Convert.ToInt16", -255, Convert.ToInt16 (d));\r
- AssertEquals ("-IConvertible.ToInt16", -255, (d as IConvertible).ToInt16 (null));\r
- }\r
-\r
- [Test]\r
- public void ToUInt16 () \r
- {\r
- Decimal d = 254.9m;\r
- AssertEquals ("Decimal.ToUInt16", 254, Decimal.ToUInt16 (d));\r
- AssertEquals ("Convert.ToUInt16", 255, Convert.ToUInt16 (d));\r
- AssertEquals ("IConvertible.ToUInt16", 255, (d as IConvertible).ToUInt16 (null));\r
- }\r
-\r
- [Test]\r
- public void ToInt32 () \r
- {\r
- Decimal d = 254.9m;\r
- AssertEquals ("Decimal.ToInt32", 254, Decimal.ToInt32 (d));\r
- AssertEquals ("Convert.ToInt32", 255, Convert.ToInt32 (d));\r
- AssertEquals ("IConvertible.ToInt32", 255, (d as IConvertible).ToInt32 (null));\r
- d = -d;\r
- AssertEquals ("-Decimal.ToInt32", -254, Decimal.ToInt32 (d));\r
- AssertEquals ("-Convert.ToInt32", -255, Convert.ToInt32 (d));\r
- AssertEquals ("-IConvertible.ToInt32", -255, (d as IConvertible).ToInt32 (null));\r
- }\r
-\r
- [Test]\r
- public void ToUInt32 () \r
- {\r
- Decimal d = 254.9m;\r
- AssertEquals ("Decimal.ToUInt32", 254, Decimal.ToUInt32 (d));\r
- AssertEquals ("Convert.ToUInt32", 255, Convert.ToUInt32 (d));\r
- AssertEquals ("IConvertible.ToUInt32", 255, (d as IConvertible).ToUInt32 (null));\r
- }\r
-\r
- [Test]\r
- public void ToInt64 () \r
- {\r
- Decimal d = 254.9m;\r
- AssertEquals ("Decimal.ToInt64", 254, Decimal.ToInt64 (d));\r
- AssertEquals ("Convert.ToInt64", 255, Convert.ToInt64 (d));\r
- AssertEquals ("IConvertible.ToInt64", 255, (d as IConvertible).ToInt64 (null));\r
- d = -d;\r
- AssertEquals ("-Decimal.ToInt64", -254, Decimal.ToInt64 (d));\r
- AssertEquals ("-Convert.ToInt64", -255, Convert.ToInt64 (d));\r
- AssertEquals ("-IConvertible.ToInt64", -255, (d as IConvertible).ToInt64 (null));\r
- }\r
-\r
- [Test]\r
- [ExpectedException (typeof(OverflowException))]\r
- public void ToInt64_TooBig () \r
- {\r
- Decimal d = (Decimal) Int64.MaxValue;\r
- d += 1.1m;\r
- long value = Decimal.ToInt64 (d);\r
- }\r
-\r
- [Test]\r
- [ExpectedException (typeof(OverflowException))]\r
- public void ToInt64_TooSmall () \r
- {\r
- Decimal d = (Decimal) Int64.MinValue;\r
- d -= 1.1m;\r
- long value = Decimal.ToInt64 (d);\r
- }\r
-\r
- [Test]\r
- public void ToUInt64 () \r
- {\r
- Decimal d = 254.9m;\r
- AssertEquals ("Decimal.ToUInt64", 254, Decimal.ToUInt64 (d));\r
- AssertEquals ("Convert.ToUInt64", 255, Convert.ToUInt64 (d));\r
- AssertEquals ("IConvertible.ToUInt64", 255, (d as IConvertible).ToUInt64 (null));\r
- }\r
-\r
- [Test]\r
- public void ToSingle () \r
- {\r
- Decimal d = 254.9m;\r
- AssertEquals ("Decimal.ToSingle", 254.9f, Decimal.ToSingle (d));\r
- AssertEquals ("Convert.ToSingle", 254.9f, Convert.ToSingle (d));\r
- AssertEquals ("IConvertible.ToSingle", 254.9f, (d as IConvertible).ToSingle (null));\r
- d = -d;\r
- AssertEquals ("-Decimal.ToSingle", -254.9f, Decimal.ToSingle (d));\r
- AssertEquals ("-Convert.ToSingle", -254.9f, Convert.ToSingle (d));\r
- AssertEquals ("-IConvertible.ToSingle", -254.9f, (d as IConvertible).ToSingle (null));\r
- }\r
-\r
- [Test]\r
- public void ToDouble () \r
- {\r
- Decimal d = 254.9m;\r
- AssertEquals ("Decimal.ToDouble", 254.9d, Decimal.ToDouble (d));\r
- AssertEquals ("Convert.ToDouble", 254.9d, Convert.ToDouble (d));\r
- AssertEquals ("IConvertible.ToDouble", 254.9d, (d as IConvertible).ToDouble (null));\r
- d = -d;\r
- AssertEquals ("-Decimal.ToDouble", -254.9d, Decimal.ToDouble (d));\r
- AssertEquals ("-Convert.ToDouble", -254.9d, Convert.ToDouble (d));\r
- AssertEquals ("-IConvertible.ToDouble", -254.9d, (d as IConvertible).ToDouble (null));\r
- }\r
-\r
- [Test]\r
- public void ToString_Defaults () \r
- {\r
- Decimal d = 254.9m;\r
- // everything defaults to "G"\r
- string def = d.ToString ("G");\r
- AssertEquals ("ToString()", def, d.ToString ());\r
- AssertEquals ("ToString((IFormatProvider)null)", def, d.ToString ((IFormatProvider)null));\r
- AssertEquals ("ToString((string)null)", def, d.ToString ((string)null));\r
- AssertEquals ("ToString(empty)", def, d.ToString (String.Empty));\r
- AssertEquals ("ToString(null,null)", def, d.ToString (null, null));\r
- AssertEquals ("ToString(empty,null)", def, d.ToString (String.Empty, null));\r
-\r
- AssertEquals ("ToString()", "254.9", def);\r
- }\r
-\r
- [Test]\r
- public void CastTruncRounding ()\r
- {\r
- // casting truncs decimal value (not normal nor banker's rounding)\r
- AssertEquals ("254.9==254", 254, (long)(254.9m));\r
- AssertEquals ("-254.9=-254", -254, (long)(-254.9m));\r
- AssertEquals ("255.9==256", 255, (long)(255.9m));\r
- AssertEquals ("-255.9=-256", -255, (long)(-255.9m));\r
- }\r
-\r
- [Test]\r
- public void ParseFractions ()\r
- {\r
- decimal d1 = Decimal.Parse ("0.523456789012345467890123456789", CultureInfo.InvariantCulture);\r
- AssertEquals ("f1", 0.5234567890123454678901234568m, d1);\r
- decimal d2 = Decimal.Parse ("0.49214206543486529434634231456", CultureInfo.InvariantCulture);\r
- AssertEquals ("f2", 0.4921420654348652943463423146m, d2);\r
- }\r
-\r
- [Test]\r
- [ExpectedException (typeof (OverflowException))]\r
- public void Parse_Int64_Overflow ()\r
- {\r
- // Int64.MaxValue + 1 + small fraction to allow 30 digits\r
- // 123456789012345678901234567890\r
- decimal d = Decimal.Parse ("9223372036854775808.0000000009", CultureInfo.InvariantCulture);\r
- long l = (long) d;\r
- }\r
-\r
- [Test]\r
- [ExpectedException (typeof (DivideByZeroException))]\r
- public void Remainder_ByZero () \r
- {\r
- Decimal.Remainder (254.9m, 0m);\r
- }\r
-\r
- [Test]\r
- public void Remainder () \r
- {\r
- decimal p1 = 254.9m;\r
- decimal p2 = 12.1m;\r
- decimal n1 = -254.9m;\r
- decimal n2 = -12.1m;\r
-\r
- AssertEquals ("254.9 % 12.1", 0.8m, Decimal.Remainder (p1, p2));\r
- AssertEquals ("-254.9 % 12.1", -0.8m, Decimal.Remainder (n1, p2));\r
- AssertEquals ("254.9 % -12.1", 0.8m, Decimal.Remainder (p1, n2));\r
- AssertEquals ("-254.9 % -12.1", -0.8m, Decimal.Remainder (n1, n2));\r
-\r
- AssertEquals ("12.1 % 254.9", 12.1m, Decimal.Remainder (p2, p1));\r
- AssertEquals ("-12.1 % 254.9", -12.1m, Decimal.Remainder (n2, p1));\r
- AssertEquals ("12.1 % -254.9", 12.1m, Decimal.Remainder (p2, n1));\r
- AssertEquals ("-12.1 % -254.9", -12.1m, Decimal.Remainder (n2, n1));\r
-#if NET_2_0\r
- AssertEquals ("12.1 % 12.1", 0.0m, Decimal.Remainder (p1, p1));\r
- AssertEquals ("-12.1 % 12.1", 0.0m, Decimal.Remainder (n1, p1));\r
- AssertEquals ("12.1 % -12.1", 0.0m, Decimal.Remainder (p1, n1));\r
- AssertEquals ("-12.1 % -12.1", 0.0m, Decimal.Remainder (n1, n1));\r
-#else\r
- AssertEquals ("12.1 % 12.1", 0, Decimal.Remainder (p1, p1));\r
- AssertEquals ("-12.1 % 12.1", 0, Decimal.Remainder (n1, p1));\r
- AssertEquals ("12.1 % -12.1", 0, Decimal.Remainder (p1, n1));\r
- AssertEquals ("-12.1 % -12.1", 0, Decimal.Remainder (n1, n1));\r
-#endif\r
- }\r
-\r
- [Test]\r
- [ExpectedException (typeof (DivideByZeroException))]\r
- public void Divide_ByZero () \r
- {\r
- Decimal.Divide (254.9m, 0m);\r
- }\r
-\r
- [Test]\r
- public void Divide () \r
- {\r
- decimal p1 = 254.9m;\r
- decimal p2 = 12.1m;\r
- decimal n1 = -254.9m;\r
- decimal n2 = -12.1m;\r
-\r
- decimal c1 = 21.066115702479338842975206612m;\r
- decimal c2 = 0.0474695959199686151431934092m;\r
-\r
- AssertEquals ("254.9 / 12.1", c1, Decimal.Divide (p1, p2));\r
- AssertEquals ("-254.9 / 12.1", -c1, Decimal.Divide (n1, p2));\r
- AssertEquals ("254.9 / -12.1", -c1, Decimal.Divide (p1, n2));\r
- AssertEquals ("-254.9 / -12.1", c1, Decimal.Divide (n1, n2));\r
-\r
- AssertEquals ("12.1 / 254.9", c2, Decimal.Divide (p2, p1));\r
- AssertEquals ("-12.1 / 254.9", -c2, Decimal.Divide (n2, p1));\r
- AssertEquals ("12.1 / -254.9", -c2, Decimal.Divide (p2, n1));\r
- AssertEquals ("-12.1 / -254.9", c2, Decimal.Divide (n2, n1));\r
-\r
- AssertEquals ("12.1 / 12.1", 1, Decimal.Divide (p1, p1));\r
- AssertEquals ("-12.1 / 12.1", -1, Decimal.Divide (n1, p1));\r
- AssertEquals ("12.1 / -12.1", -1, Decimal.Divide (p1, n1));\r
- AssertEquals ("-12.1 / -12.1", 1, Decimal.Divide (n1, n1));\r
- }\r
-\r
- [Test]\r
- [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
- public void Round_InvalidDecimals_Negative () \r
- {\r
- Decimal.Round (254.9m, -1);\r
- }\r
-\r
- [Test]\r
- [ExpectedException (typeof (ArgumentOutOfRangeException))]\r
- public void Round_InvalidDecimals_TooHigh () \r
- {\r
- Decimal.Round (254.9m, 29);\r
- }\r
-\r
- [Test]\r
- public void Round_OddValue () \r
- {\r
- decimal five = 5.5555555555555555555555555555m;\r
- AssertEquals ("5,5_,00", 6, Decimal.Round (five, 0));\r
- AssertEquals ("5,5_,01", 5.6m, Decimal.Round (five, 1));\r
- AssertEquals ("5,5_,02", 5.56m, Decimal.Round (five, 2));\r
- AssertEquals ("5,5_,03", 5.556m, Decimal.Round (five, 3));\r
- AssertEquals ("5,5_,04", 5.5556m, Decimal.Round (five, 4));\r
- AssertEquals ("5,5_,05", 5.55556m, Decimal.Round (five, 5));\r
- AssertEquals ("5,5_,06", 5.555556m, Decimal.Round (five, 6));\r
- AssertEquals ("5,5_,07", 5.5555556m, Decimal.Round (five, 7));\r
- AssertEquals ("5,5_,08", 5.55555556m, Decimal.Round (five, 8));\r
- AssertEquals ("5,5_,09", 5.555555556m, Decimal.Round (five, 9));\r
- AssertEquals ("5,5_,10", 5.5555555556m, Decimal.Round (five, 10));\r
- AssertEquals ("5,5_,11", 5.55555555556m, Decimal.Round (five, 11));\r
- AssertEquals ("5,5_,12", 5.555555555556m, Decimal.Round (five, 12));\r
- AssertEquals ("5,5_,13", 5.5555555555556m, Decimal.Round (five, 13));\r
- AssertEquals ("5,5_,14", 5.55555555555556m, Decimal.Round (five, 14));\r
- AssertEquals ("5,5_,15", 5.555555555555556m, Decimal.Round (five, 15));\r
- AssertEquals ("5,5_,16", 5.5555555555555556m, Decimal.Round (five, 16));\r
- AssertEquals ("5,5_,17", 5.55555555555555556m, Decimal.Round (five, 17));\r
- AssertEquals ("5,5_,18", 5.555555555555555556m, Decimal.Round (five, 18));\r
- AssertEquals ("5,5_,19", 5.5555555555555555556m, Decimal.Round (five, 19));\r
- AssertEquals ("5,5_,20", 5.55555555555555555556m, Decimal.Round (five, 20));\r
- AssertEquals ("5,5_,21", 5.555555555555555555556m, Decimal.Round (five, 21));\r
- AssertEquals ("5,5_,22", 5.5555555555555555555556m, Decimal.Round (five, 22));\r
- AssertEquals ("5,5_,23", 5.55555555555555555555556m, Decimal.Round (five, 23));\r
- AssertEquals ("5,5_,24", 5.555555555555555555555556m, Decimal.Round (five, 24));\r
- AssertEquals ("5,5_,25", 5.5555555555555555555555556m, Decimal.Round (five, 25));\r
- AssertEquals ("5,5_,26", 5.55555555555555555555555556m, Decimal.Round (five, 26));\r
- AssertEquals ("5,5_,27", 5.555555555555555555555555556m, Decimal.Round (five, 27));\r
- AssertEquals ("5.5_,28", 5.5555555555555555555555555555m, Decimal.Round (five, 28));\r
- }\r
-\r
- [Test]\r
- public void Round_EvenValue () \r
- {\r
- AssertEquals ("2,2_5,00", 2, Decimal.Round (2.5m, 0));\r
- AssertEquals ("2,2_5,01", 2.2m, Decimal.Round (2.25m, 1));\r
- AssertEquals ("2,2_5,02", 2.22m, Decimal.Round (2.225m, 2));\r
- AssertEquals ("2,2_5,03", 2.222m, Decimal.Round (2.2225m, 3));\r
- AssertEquals ("2,2_5,04", 2.2222m, Decimal.Round (2.22225m, 4));\r
- AssertEquals ("2,2_5,05", 2.22222m, Decimal.Round (2.222225m, 5));\r
- AssertEquals ("2,2_5,06", 2.222222m, Decimal.Round (2.2222225m, 6));\r
- AssertEquals ("2,2_5,07", 2.2222222m, Decimal.Round (2.22222225m, 7));\r
- AssertEquals ("2,2_5,08", 2.22222222m, Decimal.Round (2.222222225m, 8));\r
- AssertEquals ("2,2_5,09", 2.222222222m, Decimal.Round (2.2222222225m, 9));\r
- AssertEquals ("2,2_5,10", 2.2222222222m, Decimal.Round (2.22222222225m, 10));\r
- AssertEquals ("2,2_5,11", 2.22222222222m, Decimal.Round (2.222222222225m, 11));\r
- AssertEquals ("2,2_5,12", 2.222222222222m, Decimal.Round (2.2222222222225m, 12));\r
- AssertEquals ("2,2_5,13", 2.2222222222222m, Decimal.Round (2.22222222222225m, 13));\r
- AssertEquals ("2,2_5,14", 2.22222222222222m, Decimal.Round (2.222222222222225m, 14));\r
- AssertEquals ("2,2_5,15", 2.222222222222222m, Decimal.Round (2.2222222222222225m, 15));\r
- AssertEquals ("2,2_5,16", 2.2222222222222222m, Decimal.Round (2.22222222222222225m, 16));\r
- AssertEquals ("2,2_5,17", 2.22222222222222222m, Decimal.Round (2.222222222222222225m, 17));\r
- AssertEquals ("2,2_5,18", 2.222222222222222222m, Decimal.Round (2.2222222222222222225m, 18));\r
- AssertEquals ("2,2_5,19", 2.2222222222222222222m, Decimal.Round (2.22222222222222222225m, 19));\r
- AssertEquals ("2,2_5,20", 2.22222222222222222222m, Decimal.Round (2.222222222222222222225m, 20));\r
- AssertEquals ("2,2_5,21", 2.222222222222222222222m, Decimal.Round (2.2222222222222222222225m, 21));\r
- AssertEquals ("2,2_5,22", 2.2222222222222222222222m, Decimal.Round (2.22222222222222222222225m, 22));\r
- AssertEquals ("2,2_5,23", 2.22222222222222222222222m, Decimal.Round (2.222222222222222222222225m, 23));\r
- AssertEquals ("2,2_5,24", 2.222222222222222222222222m, Decimal.Round (2.2222222222222222222222225m, 24));\r
- AssertEquals ("2,2_5,25", 2.2222222222222222222222222m, Decimal.Round (2.22222222222222222222222225m, 25));\r
- AssertEquals ("2,2_5,26", 2.22222222222222222222222222m, Decimal.Round (2.222222222222222222222222225m, 26));\r
- AssertEquals ("2,2_5,27", 2.222222222222222222222222222m, Decimal.Round (2.2222222222222222222222222225m, 27));\r
- AssertEquals ("2,2_5,28", 2.2222222222222222222222222222m, Decimal.Round (2.22222222222222222222222222225m, 28));\r
- }\r
-\r
- [Test]\r
- public void Round_OddValue_Negative () \r
- {\r
- decimal five = -5.5555555555555555555555555555m;\r
- AssertEquals ("-5,5_,00", -6, Decimal.Round (five, 0));\r
- AssertEquals ("-5,5_,01", -5.6m, Decimal.Round (five, 1));\r
- AssertEquals ("-5,5_,02", -5.56m, Decimal.Round (five, 2));\r
- AssertEquals ("-5,5_,03", -5.556m, Decimal.Round (five, 3));\r
- AssertEquals ("-5,5_,04", -5.5556m, Decimal.Round (five, 4));\r
- AssertEquals ("-5,5_,05", -5.55556m, Decimal.Round (five, 5));\r
- AssertEquals ("-5,5_,06", -5.555556m, Decimal.Round (five, 6));\r
- AssertEquals ("-5,5_,07", -5.5555556m, Decimal.Round (five, 7));\r
- AssertEquals ("-5,5_,08", -5.55555556m, Decimal.Round (five, 8));\r
- AssertEquals ("-5,5_,09", -5.555555556m, Decimal.Round (five, 9));\r
- AssertEquals ("-5,5_,10", -5.5555555556m, Decimal.Round (five, 10));\r
- AssertEquals ("-5,5_,11", -5.55555555556m, Decimal.Round (five, 11));\r
- AssertEquals ("-5,5_,12", -5.555555555556m, Decimal.Round (five, 12));\r
- AssertEquals ("-5,5_,13", -5.5555555555556m, Decimal.Round (five, 13));\r
- AssertEquals ("-5,5_,14", -5.55555555555556m, Decimal.Round (five, 14));\r
- AssertEquals ("-5,5_,15", -5.555555555555556m, Decimal.Round (five, 15));\r
- AssertEquals ("-5,5_,16", -5.5555555555555556m, Decimal.Round (five, 16));\r
- AssertEquals ("-5,5_,17", -5.55555555555555556m, Decimal.Round (five, 17));\r
- AssertEquals ("-5,5_,18", -5.555555555555555556m, Decimal.Round (five, 18));\r
- AssertEquals ("-5,5_,19", -5.5555555555555555556m, Decimal.Round (five, 19));\r
- AssertEquals ("-5,5_,20", -5.55555555555555555556m, Decimal.Round (five, 20));\r
- AssertEquals ("-5,5_,21", -5.555555555555555555556m, Decimal.Round (five, 21));\r
- AssertEquals ("-5,5_,22", -5.5555555555555555555556m, Decimal.Round (five, 22));\r
- AssertEquals ("-5,5_,23", -5.55555555555555555555556m, Decimal.Round (five, 23));\r
- AssertEquals ("-5,5_,24", -5.555555555555555555555556m, Decimal.Round (five, 24));\r
- AssertEquals ("-5,5_,25", -5.5555555555555555555555556m, Decimal.Round (five, 25));\r
- AssertEquals ("-5,5_,26", -5.55555555555555555555555556m, Decimal.Round (five, 26));\r
- AssertEquals ("-5,5_,27", -5.555555555555555555555555556m, Decimal.Round (five, 27));\r
- AssertEquals ("-5.5_,28", -5.5555555555555555555555555555m, Decimal.Round (five, 28));\r
- }\r
-\r
- [Test]\r
- public void Round_EvenValue_Negative () \r
- {\r
- AssertEquals ("-2,2_5,00", -2, Decimal.Round (-2.5m, 0));\r
- AssertEquals ("-2,2_5,01", -2.2m, Decimal.Round (-2.25m, 1));\r
- AssertEquals ("-2,2_5,02", -2.22m, Decimal.Round (-2.225m, 2));\r
- AssertEquals ("-2,2_5,03", -2.222m, Decimal.Round (-2.2225m, 3));\r
- AssertEquals ("-2,2_5,04", -2.2222m, Decimal.Round (-2.22225m, 4));\r
- AssertEquals ("-2,2_5,05", -2.22222m, Decimal.Round (-2.222225m, 5));\r
- AssertEquals ("-2,2_5,06", -2.222222m, Decimal.Round (-2.2222225m, 6));\r
- AssertEquals ("-2,2_5,07", -2.2222222m, Decimal.Round (-2.22222225m, 7));\r
- AssertEquals ("-2,2_5,08", -2.22222222m, Decimal.Round (-2.222222225m, 8));\r
- AssertEquals ("-2,2_5,09", -2.222222222m, Decimal.Round (-2.2222222225m, 9));\r
- AssertEquals ("-2,2_5,10", -2.2222222222m, Decimal.Round (-2.22222222225m, 10));\r
- AssertEquals ("-2,2_5,11", -2.22222222222m, Decimal.Round (-2.222222222225m, 11));\r
- AssertEquals ("-2,2_5,12", -2.222222222222m, Decimal.Round (-2.2222222222225m, 12));\r
- AssertEquals ("-2,2_5,13", -2.2222222222222m, Decimal.Round (-2.22222222222225m, 13));\r
- AssertEquals ("-2,2_5,14", -2.22222222222222m, Decimal.Round (-2.222222222222225m, 14));\r
- AssertEquals ("-2,2_5,15", -2.222222222222222m, Decimal.Round (-2.2222222222222225m, 15));\r
- AssertEquals ("-2,2_5,16", -2.2222222222222222m, Decimal.Round (-2.22222222222222225m, 16));\r
- AssertEquals ("-2,2_5,17", -2.22222222222222222m, Decimal.Round (-2.222222222222222225m, 17));\r
- AssertEquals ("-2,2_5,18", -2.222222222222222222m, Decimal.Round (-2.2222222222222222225m, 18));\r
- AssertEquals ("-2,2_5,19", -2.2222222222222222222m, Decimal.Round (-2.22222222222222222225m, 19));\r
- AssertEquals ("-2,2_5,20", -2.22222222222222222222m, Decimal.Round (-2.222222222222222222225m, 20));\r
- AssertEquals ("-2,2_5,21", -2.222222222222222222222m, Decimal.Round (-2.2222222222222222222225m, 21));\r
- AssertEquals ("-2,2_5,22", -2.2222222222222222222222m, Decimal.Round (-2.22222222222222222222225m, 22));\r
- AssertEquals ("-2,2_5,23", -2.22222222222222222222222m, Decimal.Round (-2.222222222222222222222225m, 23));\r
- AssertEquals ("-2,2_5,24", -2.222222222222222222222222m, Decimal.Round (-2.2222222222222222222222225m, 24));\r
- AssertEquals ("-2,2_5,25", -2.2222222222222222222222222m, Decimal.Round (-2.22222222222222222222222225m, 25));\r
- AssertEquals ("-2,2_5,26", -2.22222222222222222222222222m, Decimal.Round (-2.222222222222222222222222225m, 26));\r
- AssertEquals ("-2,2_5,27", -2.222222222222222222222222222m, Decimal.Round (-2.2222222222222222222222222225m, 27));\r
- AssertEquals ("-2,2_5,28", -2.2222222222222222222222222222m, Decimal.Round (-2.22222222222222222222222222225m, 28));\r
+ public void TestRound()
+ {
+ decimal[,] dtab = {
+ {1m, 0, 1m}, {1.234567890m, 1, 1.2m},
+ {1.234567890m, 2, 1.23m}, {1.23450000001m, 3, 1.235m},
+ {1.2355m, 3, 1.236m},
+ {1.234567890m, 4, 1.2346m}, {1.23567890m, 2, 1.24m},
+ {47893764694.4578563236436621m, 7, 47893764694.4578563m},
+ {-47893764694.4578563236436621m, 9, -47893764694.457856324m},
+ {-47893764694.4578m, 5, -47893764694.4578m}
+ };
+
+ decimal d;
+
+ for (int i = 0; i < dtab.GetLength(0); i++)
+ {
+ d = Decimal.Round(dtab[i,0], (int)dtab[i,1]);
+ if (d != dtab[i,2])
+ {
+ Fail("Round: Round(" + dtab[i,0] + "," + (int)dtab[i,1] + ") != " + d);
+ }
+ }
+ }
+
+ public void TestRoundFailures ()
+ {
+ decimal[,] dtab = {
+ {1.2345m, 3, 1.234m}
+ };
+
+ decimal d;
+
+ for (int i = 0; i < dtab.GetLength(0); i++)
+ {
+ d = Decimal.Round(dtab[i,0], (int)dtab[i,1]);
+ if (d != dtab[i,2])
+ {
+ Fail("FailRound: Round(" + dtab[i,0] + "," + (int)dtab[i,1] + ") != " + d);
+ }
+ }
+ }
+
+ [Test]
+ public void ParseInt64 ()
+ {
+ long max = Int64.MaxValue;
+ Decimal dmax = Decimal.Parse (max.ToString ());
+ AssertEquals ("Int64.MaxValue", Int64.MaxValue, Decimal.ToInt64 (dmax));
+
+ long min = Int64.MinValue;
+ Decimal dmin = Decimal.Parse (min.ToString ());
+ AssertEquals ("Int64.MinValue", Int64.MinValue, Decimal.ToInt64 (dmin));
+
+ dmax += 1.1m;
+ dmax = Decimal.Parse (dmax.ToString ());
+ AssertEquals ("Int64.MaxValue+1.1", Int64.MaxValue, Decimal.ToInt64 (dmax - 1.1m));
+
+ dmin -= 1.1m;
+ dmin = Decimal.Parse (dmin.ToString ());
+ AssertEquals ("Int64.MinValue-1.1", Int64.MinValue, Decimal.ToInt64 (dmin + 1.1m));
+ }
+
+ [Test]
+ public void ToByte ()
+ {
+ Decimal d = 254.9m;
+ AssertEquals ("Decimal.ToByte", 254, Decimal.ToByte (d));
+ AssertEquals ("Convert.ToByte", 255, Convert.ToByte (d));
+ AssertEquals ("IConvertible.ToByte", 255, (d as IConvertible).ToByte (null));
+ }
+
+ [Test]
+ public void ToSByte ()
+ {
+ Decimal d = 126.9m;
+ AssertEquals ("Decimal.ToSByte", 126, Decimal.ToSByte (d));
+ AssertEquals ("Convert.ToSByte", 127, Convert.ToSByte (d));
+ AssertEquals ("IConvertible.ToSByte", 127, (d as IConvertible).ToSByte (null));
+ d = -d;
+ AssertEquals ("-Decimal.ToSByte", -126, Decimal.ToSByte (d));
+ AssertEquals ("-Convert.ToSByte", -127, Convert.ToSByte (d));
+ AssertEquals ("-IConvertible.ToSByte", -127, (d as IConvertible).ToSByte (null));
+ }
+
+ [Test]
+ public void ToInt16 ()
+ {
+ Decimal d = 254.9m;
+ AssertEquals ("Decimal.ToInt16", 254, Decimal.ToInt16 (d));
+ AssertEquals ("Convert.ToInt16", 255, Convert.ToInt16 (d));
+ AssertEquals ("IConvertible.ToInt16", 255, (d as IConvertible).ToInt16 (null));
+ d = -d;
+ AssertEquals ("-Decimal.ToInt16", -254, Decimal.ToInt16 (d));
+ AssertEquals ("-Convert.ToInt16", -255, Convert.ToInt16 (d));
+ AssertEquals ("-IConvertible.ToInt16", -255, (d as IConvertible).ToInt16 (null));
+ }
+
+ [Test]
+ public void ToUInt16 ()
+ {
+ Decimal d = 254.9m;
+ AssertEquals ("Decimal.ToUInt16", 254, Decimal.ToUInt16 (d));
+ AssertEquals ("Convert.ToUInt16", 255, Convert.ToUInt16 (d));
+ AssertEquals ("IConvertible.ToUInt16", 255, (d as IConvertible).ToUInt16 (null));
+ }
+
+ [Test]
+ public void ToInt32 ()
+ {
+ Decimal d = 254.9m;
+ AssertEquals ("Decimal.ToInt32", 254, Decimal.ToInt32 (d));
+ AssertEquals ("Convert.ToInt32", 255, Convert.ToInt32 (d));
+ AssertEquals ("IConvertible.ToInt32", 255, (d as IConvertible).ToInt32 (null));
+ d = -d;
+ AssertEquals ("-Decimal.ToInt32", -254, Decimal.ToInt32 (d));
+ AssertEquals ("-Convert.ToInt32", -255, Convert.ToInt32 (d));
+ AssertEquals ("-IConvertible.ToInt32", -255, (d as IConvertible).ToInt32 (null));
+ }
+
+ [Test]
+ public void ToUInt32 ()
+ {
+ Decimal d = 254.9m;
+ AssertEquals ("Decimal.ToUInt32", 254, Decimal.ToUInt32 (d));
+ AssertEquals ("Convert.ToUInt32", 255, Convert.ToUInt32 (d));
+ AssertEquals ("IConvertible.ToUInt32", 255, (d as IConvertible).ToUInt32 (null));
+ }
+
+ [Test]
+ public void ToInt64 ()
+ {
+ Decimal d = 254.9m;
+ AssertEquals ("Decimal.ToInt64", 254, Decimal.ToInt64 (d));
+ AssertEquals ("Convert.ToInt64", 255, Convert.ToInt64 (d));
+ AssertEquals ("IConvertible.ToInt64", 255, (d as IConvertible).ToInt64 (null));
+ d = -d;
+ AssertEquals ("-Decimal.ToInt64", -254, Decimal.ToInt64 (d));
+ AssertEquals ("-Convert.ToInt64", -255, Convert.ToInt64 (d));
+ AssertEquals ("-IConvertible.ToInt64", -255, (d as IConvertible).ToInt64 (null));
+ }
+
+ [Test]
+ [ExpectedException (typeof(OverflowException))]
+ public void ToInt64_TooBig ()
+ {
+ Decimal d = (Decimal) Int64.MaxValue;
+ d += 1.1m;
+ long value = Decimal.ToInt64 (d);
+ }
+
+ [Test]
+ [ExpectedException (typeof(OverflowException))]
+ public void ToInt64_TooSmall ()
+ {
+ Decimal d = (Decimal) Int64.MinValue;
+ d -= 1.1m;
+ long value = Decimal.ToInt64 (d);
+ }
+
+ [Test]
+ public void ToUInt64 ()
+ {
+ Decimal d = 254.9m;
+ AssertEquals ("Decimal.ToUInt64", 254, Decimal.ToUInt64 (d));
+ AssertEquals ("Convert.ToUInt64", 255, Convert.ToUInt64 (d));
+ AssertEquals ("IConvertible.ToUInt64", 255, (d as IConvertible).ToUInt64 (null));
+ }
+
+ [Test]
+ public void ToSingle ()
+ {
+ Decimal d = 254.9m;
+ AssertEquals ("Decimal.ToSingle", 254.9f, Decimal.ToSingle (d));
+ AssertEquals ("Convert.ToSingle", 254.9f, Convert.ToSingle (d));
+ AssertEquals ("IConvertible.ToSingle", 254.9f, (d as IConvertible).ToSingle (null));
+ d = -d;
+ AssertEquals ("-Decimal.ToSingle", -254.9f, Decimal.ToSingle (d));
+ AssertEquals ("-Convert.ToSingle", -254.9f, Convert.ToSingle (d));
+ AssertEquals ("-IConvertible.ToSingle", -254.9f, (d as IConvertible).ToSingle (null));
+ }
+
+ [Test]
+ public void ToDouble ()
+ {
+ Decimal d = 254.9m;
+ AssertEquals ("Decimal.ToDouble", 254.9d, Decimal.ToDouble (d));
+ AssertEquals ("Convert.ToDouble", 254.9d, Convert.ToDouble (d));
+ AssertEquals ("IConvertible.ToDouble", 254.9d, (d as IConvertible).ToDouble (null));
+ d = -d;
+ AssertEquals ("-Decimal.ToDouble", -254.9d, Decimal.ToDouble (d));
+ AssertEquals ("-Convert.ToDouble", -254.9d, Convert.ToDouble (d));
+ AssertEquals ("-IConvertible.ToDouble", -254.9d, (d as IConvertible).ToDouble (null));
+ }
+
+ [Test]
+ public void ToString_Defaults ()
+ {
+ Decimal d = 254.9m;
+ // everything defaults to "G"
+ string def = d.ToString ("G");
+ AssertEquals ("ToString()", def, d.ToString ());
+ AssertEquals ("ToString((IFormatProvider)null)", def, d.ToString ((IFormatProvider)null));
+ AssertEquals ("ToString((string)null)", def, d.ToString ((string)null));
+ AssertEquals ("ToString(empty)", def, d.ToString (String.Empty));
+ AssertEquals ("ToString(null,null)", def, d.ToString (null, null));
+ AssertEquals ("ToString(empty,null)", def, d.ToString (String.Empty, null));
+
+ AssertEquals ("ToString()", "254.9", def);
+ }
+
+ [Test]
+ public void CastTruncRounding ()
+ {
+ // casting truncs decimal value (not normal nor banker's rounding)
+ AssertEquals ("254.9==254", 254, (long)(254.9m));
+ AssertEquals ("-254.9=-254", -254, (long)(-254.9m));
+ AssertEquals ("255.9==256", 255, (long)(255.9m));
+ AssertEquals ("-255.9=-256", -255, (long)(-255.9m));
+ }
+
+ [Test]
+ public void ParseFractions ()
+ {
+ decimal d1 = Decimal.Parse ("0.523456789012345467890123456789", CultureInfo.InvariantCulture);
+ AssertEquals ("f1", 0.5234567890123454678901234568m, d1);
+ decimal d2 = Decimal.Parse ("0.49214206543486529434634231456", CultureInfo.InvariantCulture);
+ AssertEquals ("f2", 0.4921420654348652943463423146m, d2);
+ }
+
+ [Test]
+ [ExpectedException (typeof (OverflowException))]
+ public void Parse_Int64_Overflow ()
+ {
+ // Int64.MaxValue + 1 + small fraction to allow 30 digits
+ // 123456789012345678901234567890
+ decimal d = Decimal.Parse ("9223372036854775808.0000000009", CultureInfo.InvariantCulture);
+ long l = (long) d;
+ }
+
+#if NET_2_0
+ [Test]
+ public void TryParse ()
+ {
+ Decimal r;
+
+ // These should return false
+ AssertEquals (false, Decimal.TryParse ("79228162514264337593543950336", out r));
+ AssertEquals (false, Decimal.TryParse ("123nx", NumberStyles.Number, CultureInfo.InvariantCulture, out r));
+ AssertEquals (false, Decimal.TryParse (null, NumberStyles.Number, CultureInfo.InvariantCulture, out r));
+
+ // These should pass
+ for (int i = 0; i < tab.Length; i++){
+ AssertEquals (!tab [i].exceptionFlag,
+ Decimal.TryParse (tab [i].str, tab [i].style,
+ NumberFormatInfo.InvariantInfo, out r));
+ }
+ }
+#endif
+
+ [Test]
+ [ExpectedException (typeof (DivideByZeroException))]
+ public void Remainder_ByZero ()
+ {
+ Decimal.Remainder (254.9m, 0m);
+ }
+
+ [Test]
+ public void Remainder ()
+ {
+ decimal p1 = 254.9m;
+ decimal p2 = 12.1m;
+ decimal n1 = -254.9m;
+ decimal n2 = -12.1m;
+
+ AssertEquals ("254.9 % 12.1", 0.8m, Decimal.Remainder (p1, p2));
+ AssertEquals ("-254.9 % 12.1", -0.8m, Decimal.Remainder (n1, p2));
+ AssertEquals ("254.9 % -12.1", 0.8m, Decimal.Remainder (p1, n2));
+ AssertEquals ("-254.9 % -12.1", -0.8m, Decimal.Remainder (n1, n2));
+
+ AssertEquals ("12.1 % 254.9", 12.1m, Decimal.Remainder (p2, p1));
+ AssertEquals ("-12.1 % 254.9", -12.1m, Decimal.Remainder (n2, p1));
+ AssertEquals ("12.1 % -254.9", 12.1m, Decimal.Remainder (p2, n1));
+ AssertEquals ("-12.1 % -254.9", -12.1m, Decimal.Remainder (n2, n1));
+#if NET_2_0
+ AssertEquals ("12.1 % 12.1", 0.0m, Decimal.Remainder (p1, p1));
+ AssertEquals ("-12.1 % 12.1", 0.0m, Decimal.Remainder (n1, p1));
+ AssertEquals ("12.1 % -12.1", 0.0m, Decimal.Remainder (p1, n1));
+ AssertEquals ("-12.1 % -12.1", 0.0m, Decimal.Remainder (n1, n1));
+#else
+ AssertEquals ("12.1 % 12.1", 0, Decimal.Remainder (p1, p1));
+ AssertEquals ("-12.1 % 12.1", 0, Decimal.Remainder (n1, p1));
+ AssertEquals ("12.1 % -12.1", 0, Decimal.Remainder (p1, n1));
+ AssertEquals ("-12.1 % -12.1", 0, Decimal.Remainder (n1, n1));
+#endif
+ }
+
+ [Test]
+ [ExpectedException (typeof (DivideByZeroException))]
+ public void Divide_ByZero ()
+ {
+ Decimal.Divide (254.9m, 0m);
+ }
+
+ [Test]
+ public void Divide ()
+ {
+ decimal p1 = 254.9m;
+ decimal p2 = 12.1m;
+ decimal n1 = -254.9m;
+ decimal n2 = -12.1m;
+
+ decimal c1 = 21.066115702479338842975206612m;
+ decimal c2 = 0.0474695959199686151431934092m;
+
+ AssertEquals ("254.9 / 12.1", c1, Decimal.Divide (p1, p2));
+ AssertEquals ("-254.9 / 12.1", -c1, Decimal.Divide (n1, p2));
+ AssertEquals ("254.9 / -12.1", -c1, Decimal.Divide (p1, n2));
+ AssertEquals ("-254.9 / -12.1", c1, Decimal.Divide (n1, n2));
+
+ AssertEquals ("12.1 / 254.9", c2, Decimal.Divide (p2, p1));
+ AssertEquals ("-12.1 / 254.9", -c2, Decimal.Divide (n2, p1));
+ AssertEquals ("12.1 / -254.9", -c2, Decimal.Divide (p2, n1));
+ AssertEquals ("-12.1 / -254.9", c2, Decimal.Divide (n2, n1));
+
+ AssertEquals ("12.1 / 12.1", 1, Decimal.Divide (p1, p1));
+ AssertEquals ("-12.1 / 12.1", -1, Decimal.Divide (n1, p1));
+ AssertEquals ("12.1 / -12.1", -1, Decimal.Divide (p1, n1));
+ AssertEquals ("-12.1 / -12.1", 1, Decimal.Divide (n1, n1));
+ }
+
+ [Test]
+ [ExpectedException (typeof (ArgumentOutOfRangeException))]
+ public void Round_InvalidDecimals_Negative ()
+ {
+ Decimal.Round (254.9m, -1);
+ }
+
+ [Test]
+ [ExpectedException (typeof (ArgumentOutOfRangeException))]
+ public void Round_InvalidDecimals_TooHigh ()
+ {
+ Decimal.Round (254.9m, 29);
+ }
+
+ [Test]
+ public void Round_OddValue ()
+ {
+ decimal five = 5.5555555555555555555555555555m;
+ AssertEquals ("5,5_,00", 6, Decimal.Round (five, 0));
+ AssertEquals ("5,5_,01", 5.6m, Decimal.Round (five, 1));
+ AssertEquals ("5,5_,02", 5.56m, Decimal.Round (five, 2));
+ AssertEquals ("5,5_,03", 5.556m, Decimal.Round (five, 3));
+ AssertEquals ("5,5_,04", 5.5556m, Decimal.Round (five, 4));
+ AssertEquals ("5,5_,05", 5.55556m, Decimal.Round (five, 5));
+ AssertEquals ("5,5_,06", 5.555556m, Decimal.Round (five, 6));
+ AssertEquals ("5,5_,07", 5.5555556m, Decimal.Round (five, 7));
+ AssertEquals ("5,5_,08", 5.55555556m, Decimal.Round (five, 8));
+ AssertEquals ("5,5_,09", 5.555555556m, Decimal.Round (five, 9));
+ AssertEquals ("5,5_,10", 5.5555555556m, Decimal.Round (five, 10));
+ AssertEquals ("5,5_,11", 5.55555555556m, Decimal.Round (five, 11));
+ AssertEquals ("5,5_,12", 5.555555555556m, Decimal.Round (five, 12));
+ AssertEquals ("5,5_,13", 5.5555555555556m, Decimal.Round (five, 13));
+ AssertEquals ("5,5_,14", 5.55555555555556m, Decimal.Round (five, 14));
+ AssertEquals ("5,5_,15", 5.555555555555556m, Decimal.Round (five, 15));
+ AssertEquals ("5,5_,16", 5.5555555555555556m, Decimal.Round (five, 16));
+ AssertEquals ("5,5_,17", 5.55555555555555556m, Decimal.Round (five, 17));
+ AssertEquals ("5,5_,18", 5.555555555555555556m, Decimal.Round (five, 18));
+ AssertEquals ("5,5_,19", 5.5555555555555555556m, Decimal.Round (five, 19));
+ AssertEquals ("5,5_,20", 5.55555555555555555556m, Decimal.Round (five, 20));
+ AssertEquals ("5,5_,21", 5.555555555555555555556m, Decimal.Round (five, 21));
+ AssertEquals ("5,5_,22", 5.5555555555555555555556m, Decimal.Round (five, 22));
+ AssertEquals ("5,5_,23", 5.55555555555555555555556m, Decimal.Round (five, 23));
+ AssertEquals ("5,5_,24", 5.555555555555555555555556m, Decimal.Round (five, 24));
+ AssertEquals ("5,5_,25", 5.5555555555555555555555556m, Decimal.Round (five, 25));
+ AssertEquals ("5,5_,26", 5.55555555555555555555555556m, Decimal.Round (five, 26));
+ AssertEquals ("5,5_,27", 5.555555555555555555555555556m, Decimal.Round (five, 27));
+ AssertEquals ("5.5_,28", 5.5555555555555555555555555555m, Decimal.Round (five, 28));
+ }
+
+ [Test]
+ public void Round_EvenValue ()
+ {
+ AssertEquals ("2,2_5,00", 2, Decimal.Round (2.5m, 0));
+ AssertEquals ("2,2_5,01", 2.2m, Decimal.Round (2.25m, 1));
+ AssertEquals ("2,2_5,02", 2.22m, Decimal.Round (2.225m, 2));
+ AssertEquals ("2,2_5,03", 2.222m, Decimal.Round (2.2225m, 3));
+ AssertEquals ("2,2_5,04", 2.2222m, Decimal.Round (2.22225m, 4));
+ AssertEquals ("2,2_5,05", 2.22222m, Decimal.Round (2.222225m, 5));
+ AssertEquals ("2,2_5,06", 2.222222m, Decimal.Round (2.2222225m, 6));
+ AssertEquals ("2,2_5,07", 2.2222222m, Decimal.Round (2.22222225m, 7));
+ AssertEquals ("2,2_5,08", 2.22222222m, Decimal.Round (2.222222225m, 8));
+ AssertEquals ("2,2_5,09", 2.222222222m, Decimal.Round (2.2222222225m, 9));
+ AssertEquals ("2,2_5,10", 2.2222222222m, Decimal.Round (2.22222222225m, 10));
+ AssertEquals ("2,2_5,11", 2.22222222222m, Decimal.Round (2.222222222225m, 11));
+ AssertEquals ("2,2_5,12", 2.222222222222m, Decimal.Round (2.2222222222225m, 12));
+ AssertEquals ("2,2_5,13", 2.2222222222222m, Decimal.Round (2.22222222222225m, 13));
+ AssertEquals ("2,2_5,14", 2.22222222222222m, Decimal.Round (2.222222222222225m, 14));
+ AssertEquals ("2,2_5,15", 2.222222222222222m, Decimal.Round (2.2222222222222225m, 15));
+ AssertEquals ("2,2_5,16", 2.2222222222222222m, Decimal.Round (2.22222222222222225m, 16));
+ AssertEquals ("2,2_5,17", 2.22222222222222222m, Decimal.Round (2.222222222222222225m, 17));
+ AssertEquals ("2,2_5,18", 2.222222222222222222m, Decimal.Round (2.2222222222222222225m, 18));
+ AssertEquals ("2,2_5,19", 2.2222222222222222222m, Decimal.Round (2.22222222222222222225m, 19));
+ AssertEquals ("2,2_5,20", 2.22222222222222222222m, Decimal.Round (2.222222222222222222225m, 20));
+ AssertEquals ("2,2_5,21", 2.222222222222222222222m, Decimal.Round (2.2222222222222222222225m, 21));
+ AssertEquals ("2,2_5,22", 2.2222222222222222222222m, Decimal.Round (2.22222222222222222222225m, 22));
+ AssertEquals ("2,2_5,23", 2.22222222222222222222222m, Decimal.Round (2.222222222222222222222225m, 23));
+ AssertEquals ("2,2_5,24", 2.222222222222222222222222m, Decimal.Round (2.2222222222222222222222225m, 24));
+ AssertEquals ("2,2_5,25", 2.2222222222222222222222222m, Decimal.Round (2.22222222222222222222222225m, 25));
+ AssertEquals ("2,2_5,26", 2.22222222222222222222222222m, Decimal.Round (2.222222222222222222222222225m, 26));
+ AssertEquals ("2,2_5,27", 2.222222222222222222222222222m, Decimal.Round (2.2222222222222222222222222225m, 27));
+ AssertEquals ("2,2_5,28", 2.2222222222222222222222222222m, Decimal.Round (2.22222222222222222222222222225m, 28));
+ }
+
+ [Test]
+ public void Round_OddValue_Negative ()
+ {
+ decimal five = -5.5555555555555555555555555555m;
+ AssertEquals ("-5,5_,00", -6, Decimal.Round (five, 0));
+ AssertEquals ("-5,5_,01", -5.6m, Decimal.Round (five, 1));
+ AssertEquals ("-5,5_,02", -5.56m, Decimal.Round (five, 2));
+ AssertEquals ("-5,5_,03", -5.556m, Decimal.Round (five, 3));
+ AssertEquals ("-5,5_,04", -5.5556m, Decimal.Round (five, 4));
+ AssertEquals ("-5,5_,05", -5.55556m, Decimal.Round (five, 5));
+ AssertEquals ("-5,5_,06", -5.555556m, Decimal.Round (five, 6));
+ AssertEquals ("-5,5_,07", -5.5555556m, Decimal.Round (five, 7));
+ AssertEquals ("-5,5_,08", -5.55555556m, Decimal.Round (five, 8));
+ AssertEquals ("-5,5_,09", -5.555555556m, Decimal.Round (five, 9));
+ AssertEquals ("-5,5_,10", -5.5555555556m, Decimal.Round (five, 10));
+ AssertEquals ("-5,5_,11", -5.55555555556m, Decimal.Round (five, 11));
+ AssertEquals ("-5,5_,12", -5.555555555556m, Decimal.Round (five, 12));
+ AssertEquals ("-5,5_,13", -5.5555555555556m, Decimal.Round (five, 13));
+ AssertEquals ("-5,5_,14", -5.55555555555556m, Decimal.Round (five, 14));
+ AssertEquals ("-5,5_,15", -5.555555555555556m, Decimal.Round (five, 15));
+ AssertEquals ("-5,5_,16", -5.5555555555555556m, Decimal.Round (five, 16));
+ AssertEquals ("-5,5_,17", -5.55555555555555556m, Decimal.Round (five, 17));
+ AssertEquals ("-5,5_,18", -5.555555555555555556m, Decimal.Round (five, 18));
+ AssertEquals ("-5,5_,19", -5.5555555555555555556m, Decimal.Round (five, 19));
+ AssertEquals ("-5,5_,20", -5.55555555555555555556m, Decimal.Round (five, 20));
+ AssertEquals ("-5,5_,21", -5.555555555555555555556m, Decimal.Round (five, 21));
+ AssertEquals ("-5,5_,22", -5.5555555555555555555556m, Decimal.Round (five, 22));
+ AssertEquals ("-5,5_,23", -5.55555555555555555555556m, Decimal.Round (five, 23));
+ AssertEquals ("-5,5_,24", -5.555555555555555555555556m, Decimal.Round (five, 24));
+ AssertEquals ("-5,5_,25", -5.5555555555555555555555556m, Decimal.Round (five, 25));
+ AssertEquals ("-5,5_,26", -5.55555555555555555555555556m, Decimal.Round (five, 26));
+ AssertEquals ("-5,5_,27", -5.555555555555555555555555556m, Decimal.Round (five, 27));
+ AssertEquals ("-5.5_,28", -5.5555555555555555555555555555m, Decimal.Round (five, 28));
+ }
+
+ [Test]
+ public void Round_EvenValue_Negative ()
+ {
+ AssertEquals ("-2,2_5,00", -2, Decimal.Round (-2.5m, 0));
+ AssertEquals ("-2,2_5,01", -2.2m, Decimal.Round (-2.25m, 1));
+ AssertEquals ("-2,2_5,02", -2.22m, Decimal.Round (-2.225m, 2));
+ AssertEquals ("-2,2_5,03", -2.222m, Decimal.Round (-2.2225m, 3));
+ AssertEquals ("-2,2_5,04", -2.2222m, Decimal.Round (-2.22225m, 4));
+ AssertEquals ("-2,2_5,05", -2.22222m, Decimal.Round (-2.222225m, 5));
+ AssertEquals ("-2,2_5,06", -2.222222m, Decimal.Round (-2.2222225m, 6));
+ AssertEquals ("-2,2_5,07", -2.2222222m, Decimal.Round (-2.22222225m, 7));
+ AssertEquals ("-2,2_5,08", -2.22222222m, Decimal.Round (-2.222222225m, 8));
+ AssertEquals ("-2,2_5,09", -2.222222222m, Decimal.Round (-2.2222222225m, 9));
+ AssertEquals ("-2,2_5,10", -2.2222222222m, Decimal.Round (-2.22222222225m, 10));
+ AssertEquals ("-2,2_5,11", -2.22222222222m, Decimal.Round (-2.222222222225m, 11));
+ AssertEquals ("-2,2_5,12", -2.222222222222m, Decimal.Round (-2.2222222222225m, 12));
+ AssertEquals ("-2,2_5,13", -2.2222222222222m, Decimal.Round (-2.22222222222225m, 13));
+ AssertEquals ("-2,2_5,14", -2.22222222222222m, Decimal.Round (-2.222222222222225m, 14));
+ AssertEquals ("-2,2_5,15", -2.222222222222222m, Decimal.Round (-2.2222222222222225m, 15));
+ AssertEquals ("-2,2_5,16", -2.2222222222222222m, Decimal.Round (-2.22222222222222225m, 16));
+ AssertEquals ("-2,2_5,17", -2.22222222222222222m, Decimal.Round (-2.222222222222222225m, 17));
+ AssertEquals ("-2,2_5,18", -2.222222222222222222m, Decimal.Round (-2.2222222222222222225m, 18));
+ AssertEquals ("-2,2_5,19", -2.2222222222222222222m, Decimal.Round (-2.22222222222222222225m, 19));
+ AssertEquals ("-2,2_5,20", -2.22222222222222222222m, Decimal.Round (-2.222222222222222222225m, 20));
+ AssertEquals ("-2,2_5,21", -2.222222222222222222222m, Decimal.Round (-2.2222222222222222222225m, 21));
+ AssertEquals ("-2,2_5,22", -2.2222222222222222222222m, Decimal.Round (-2.22222222222222222222225m, 22));
+ AssertEquals ("-2,2_5,23", -2.22222222222222222222222m, Decimal.Round (-2.222222222222222222222225m, 23));
+ AssertEquals ("-2,2_5,24", -2.222222222222222222222222m, Decimal.Round (-2.2222222222222222222222225m, 24));
+ AssertEquals ("-2,2_5,25", -2.2222222222222222222222222m, Decimal.Round (-2.22222222222222222222222225m, 25));
+ AssertEquals ("-2,2_5,26", -2.22222222222222222222222222m, Decimal.Round (-2.222222222222222222222222225m, 26));
+ AssertEquals ("-2,2_5,27", -2.222222222222222222222222222m, Decimal.Round (-2.2222222222222222222222222225m, 27));
+ AssertEquals ("-2,2_5,28", -2.2222222222222222222222222222m, Decimal.Round (-2.22222222222222222222222222225m, 28));