2 // SqlMoneyTest.cs - NUnit Test Cases for System.Data.SqlTypes.SqlMoney
\r
5 // Ville Palo (vi64pa@koti.soon.fi)
\r
6 // Martin Willemoes Hansen (mwh@sysrq.dk)
\r
8 // (C) 2002 Ville Palo
\r
9 // (C) 2003 Martin Willemoes Hansen
\r
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
15 // Permission is hereby granted, free of charge, to any person obtaining
16 // a copy of this software and associated documentation files (the
17 // "Software"), to deal in the Software without restriction, including
18 // without limitation the rights to use, copy, modify, merge, publish,
19 // distribute, sublicense, and/or sell copies of the Software, and to
20 // permit persons to whom the Software is furnished to do so, subject to
21 // the following conditions:
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 using NUnit.Framework;
\r
37 using System.Data.SqlTypes;
\r
38 using System.Threading;
\r
39 using System.Globalization;
\r
41 namespace MonoTests.System.Data.SqlTypes
\r
44 public class SqlMoneyTest : Assertion {
\r
46 private SqlMoney Test1;
\r
47 private SqlMoney Test2;
\r
48 private SqlMoney Test3;
\r
49 private SqlMoney Test4;
\r
52 public void GetReady()
\r
54 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
\r
55 Test1 = new SqlMoney (6464.6464d);
\r
56 Test2 = new SqlMoney (90000.0m);
\r
57 Test3 = new SqlMoney (90000.0m);
\r
58 Test4 = new SqlMoney (-45000.0m);
\r
63 public void Create()
\r
66 SqlMoney Test = new SqlMoney (1000000000000000m);
\r
68 } catch (Exception e) {
\r
69 AssertEquals ("#A02", typeof (OverflowException),
\r
73 SqlMoney CreationTest = new SqlMoney ((decimal)913.3);
\r
74 AssertEquals ("A03", 913.3000m, CreationTest.Value);
\r
77 SqlMoney Test = new SqlMoney (1e200);
\r
79 } catch (Exception e) {
\r
80 AssertEquals ("#A05", typeof (OverflowException),
\r
84 SqlMoney CreationTest2 = new SqlMoney ((double)913.3);
\r
85 AssertEquals ("A06", 913.3000m, CreationTest2.Value);
\r
87 SqlMoney CreationTest3 = new SqlMoney ((int)913);
\r
88 AssertEquals ("A07", 913.0000m, CreationTest3.Value);
\r
90 SqlMoney CreationTest4 = new SqlMoney ((long)913.3);
\r
91 AssertEquals ("A08", 913.0000m, CreationTest4.Value);
\r
94 // Test public fields
\r
96 public void PublicFields()
\r
98 // FIXME: There is a error in msdn docs, it says thath MaxValue
\r
99 // is 922,337,203,685,475.5807 when the actual value is
\r
100 // 922,337,203,685,477.5807
\r
101 AssertEquals ("#B01", 922337203685477.5807m, SqlMoney.MaxValue.Value);
\r
102 AssertEquals ("#B02", -922337203685477.5808m, SqlMoney.MinValue.Value);
\r
103 Assert ("#B03", SqlMoney.Null.IsNull);
\r
104 AssertEquals ("#B04", 0m, SqlMoney.Zero.Value);
\r
109 public void Properties()
\r
111 AssertEquals ("#C01", 90000.0000m, Test2.Value);
\r
112 AssertEquals ("#C02", -45000.0000m, Test4.Value);
\r
113 Assert ("#C03", SqlMoney.Null.IsNull);
\r
119 public void ArithmeticMethods()
\r
121 SqlMoney TestMoney2 = new SqlMoney (2);
\r
124 AssertEquals ("#D01", (SqlMoney)96464.6464m, SqlMoney.Add (Test1, Test2));
\r
125 AssertEquals ("#D02", (SqlMoney)180000m, SqlMoney.Add (Test2, Test2));
\r
126 AssertEquals ("#D03", (SqlMoney)45000m, SqlMoney.Add (Test2, Test4));
\r
129 SqlMoney test = SqlMoney.Add(SqlMoney.MaxValue, Test2);
\r
131 } catch (Exception e) {
\r
132 AssertEquals ("#D05", typeof (OverflowException), e.GetType ());
\r
136 AssertEquals ("#D06", (SqlMoney)45000m, SqlMoney.Divide (Test2, TestMoney2));
\r
138 SqlMoney test = SqlMoney.Divide (Test2, SqlMoney.Zero);
\r
140 } catch (Exception e) {
\r
141 AssertEquals ("#D08", typeof (DivideByZeroException),
\r
146 AssertEquals ("#D09", (SqlMoney)581818176m, SqlMoney.Multiply (Test1, Test2));
\r
147 AssertEquals ("#D10", (SqlMoney)(-4050000000m), SqlMoney.Multiply (Test3, Test4));
\r
150 SqlMoney test = SqlMoney.Multiply (SqlMoney.MaxValue, Test2);
\r
152 } catch (Exception e) {
\r
153 AssertEquals ("#D12", typeof (OverflowException), e.GetType ());
\r
157 AssertEquals ("#D13", (SqlMoney)0m, SqlMoney.Subtract (Test2, Test3));
\r
158 AssertEquals ("#D14", (SqlMoney)83535.3536m, SqlMoney.Subtract (Test2, Test1));
\r
161 SqlMoney test = SqlMoney.Subtract (SqlMoney.MinValue, Test2);
\r
162 } catch (Exception e) {
\r
163 AssertEquals ("#D15", typeof (OverflowException), e.GetType ());
\r
168 public void CompareTo()
\r
170 Assert ("#E01", Test1.CompareTo (Test2) < 0);
\r
171 Assert ("#E02", Test3.CompareTo (Test1) > 0);
\r
172 Assert ("#E03", Test3.CompareTo (Test2) == 0);
\r
173 Assert ("#E04", Test3.CompareTo (SqlMoney.Null) > 0);
\r
177 public void EqualsMethods()
\r
179 Assert ("#F01", !Test1.Equals (Test2));
\r
180 Assert ("#F02", Test2.Equals (Test3));
\r
181 Assert ("#F03", !SqlMoney.Equals (Test1, Test2).Value);
\r
182 Assert ("#F04", SqlMoney.Equals (Test3, Test2).Value);
\r
186 public void GetHashCodeTest()
\r
188 // FIXME: Better way to test HashCode
\r
189 AssertEquals ("#G01", Test3.GetHashCode (), Test2.GetHashCode ());
\r
190 Assert ("#G02", Test2.GetHashCode () != Test1.GetHashCode ());
\r
194 public void GetTypeTest()
\r
196 AssertEquals ("#H01", "System.Data.SqlTypes.SqlMoney",
\r
197 Test1.GetType ().ToString ());
\r
201 public void Greaters()
\r
204 Assert ("#I01", !SqlMoney.GreaterThan (Test1, Test2).Value);
\r
205 Assert ("#I02", SqlMoney.GreaterThan (Test2, Test1).Value);
\r
206 Assert ("#I03", !SqlMoney.GreaterThan (Test2, Test3).Value);
\r
207 Assert ("#I04", SqlMoney.GreaterThan (Test2, SqlMoney.Null).IsNull);
\r
209 // GreaterTharOrEqual ()
\r
210 Assert ("#I05", !SqlMoney.GreaterThanOrEqual (Test1, Test2).Value);
\r
211 Assert ("#I06", SqlMoney.GreaterThanOrEqual (Test2, Test1).Value);
\r
212 Assert ("#I07", SqlMoney.GreaterThanOrEqual (Test3, Test2).Value);
\r
213 Assert ("#I08", SqlMoney.GreaterThanOrEqual (Test3, SqlMoney.Null).IsNull);
\r
217 public void Lessers()
\r
220 Assert ("#J01", !SqlMoney.LessThan (Test2, Test3).Value);
\r
221 Assert ("#J02", !SqlMoney.LessThan (Test2, Test1).Value);
\r
222 Assert ("#J03", SqlMoney.LessThan (Test1, Test2).Value);
\r
223 Assert ("#J04", SqlMoney.LessThan (SqlMoney.Null, Test2).IsNull);
\r
225 // LessThanOrEqual ()
\r
226 Assert ("#J05", SqlMoney.LessThanOrEqual (Test1, Test2).Value);
\r
227 Assert ("#J06", !SqlMoney.LessThanOrEqual (Test2, Test1).Value);
\r
228 Assert ("#J07", SqlMoney.LessThanOrEqual (Test2, Test2).Value);
\r
229 Assert ("#J08", SqlMoney.LessThanOrEqual (Test2, SqlMoney.Null).IsNull);
\r
233 public void NotEquals()
\r
235 Assert ("#K01", SqlMoney.NotEquals (Test1, Test2).Value);
\r
236 Assert ("#K02", SqlMoney.NotEquals (Test2, Test1).Value);
\r
237 Assert ("#K03", !SqlMoney.NotEquals (Test2, Test3).Value);
\r
238 Assert ("#K04", !SqlMoney.NotEquals (Test3, Test2).Value);
\r
239 Assert ("#K05", SqlMoney.NotEquals (SqlMoney.Null, Test2).IsNull);
\r
243 public void Parse()
\r
246 SqlMoney.Parse (null);
\r
248 } catch (Exception e) {
\r
249 AssertEquals ("#L02", typeof (ArgumentNullException), e.GetType ());
\r
253 SqlMoney.Parse ("not-a-number");
\r
255 } catch (Exception e) {
\r
257 AssertEquals ("#L04", typeof (FormatException), e.GetType ());
\r
261 SqlMoney.Parse ("1000000000000000");
\r
263 } catch (Exception e) {
\r
264 AssertEquals ("#L06", typeof (OverflowException), e.GetType ());
\r
267 AssertEquals("#L07", 150.0000M, SqlMoney.Parse ("150").Value);
\r
271 public void Conversions()
\r
273 SqlMoney TestMoney100 = new SqlMoney (100);
\r
276 AssertEquals ("#M01", (decimal)6464.6464, Test1.ToDecimal ());
\r
279 AssertEquals ("#M02", (double)6464.6464, Test1.ToDouble ());
\r
282 AssertEquals ("#M03", (int)90000, Test2.ToInt32 ());
\r
283 AssertEquals ("#M04", (int)6465, Test1.ToInt32 ());
\r
286 AssertEquals ("#M05", (long)90000, Test2.ToInt64 ());
\r
287 AssertEquals ("#M06", (long)6465, Test1.ToInt64 ());
\r
290 Assert ("#M07", Test1.ToSqlBoolean ().Value);
\r
291 Assert ("#M08", !SqlMoney.Zero.ToSqlBoolean ().Value);
\r
292 Assert ("#M09", SqlMoney.Null.ToSqlBoolean ().IsNull);
\r
295 AssertEquals ("#M10", (byte)100, TestMoney100.ToSqlByte ().Value);
\r
298 SqlByte b = (byte)Test2.ToSqlByte ();
\r
300 } catch (Exception e) {
\r
301 AssertEquals ("#M12", typeof (OverflowException), e.GetType ());
\r
305 AssertEquals ("#M13", (decimal)6464.6464, Test1.ToSqlDecimal ().Value);
\r
306 AssertEquals ("#M14", -45000.0000m, Test4.ToSqlDecimal ().Value);
\r
309 AssertEquals ("#M15", (short)6465, Test1.ToSqlInt16 ().Value);
\r
312 SqlInt16 test = SqlMoney.MaxValue.ToSqlInt16().Value;
\r
314 } catch (Exception e) {
\r
315 AssertEquals ("#M18", typeof (OverflowException), e.GetType ());
\r
319 AssertEquals ("#M19", (int)6465, Test1.ToSqlInt32 ().Value);
\r
320 AssertEquals ("#M20", (int)(-45000), Test4.ToSqlInt32 ().Value);
\r
323 SqlInt32 test = SqlMoney.MaxValue.ToSqlInt32 ().Value;
\r
325 } catch (Exception e) {
\r
326 AssertEquals ("#M22", typeof (OverflowException), e.GetType ());
\r
330 AssertEquals ("#M23", (long)6465, Test1.ToSqlInt64 ().Value);
\r
331 AssertEquals ("#M24", (long)(-45000), Test4.ToSqlInt64 ().Value);
\r
334 AssertEquals ("#M25", (float)6464.6464, Test1.ToSqlSingle ().Value);
\r
337 AssertEquals ("#M26", "6464.6464", Test1.ToSqlString ().Value);
\r
338 AssertEquals ("#M27", "90000.0000", Test2.ToSqlString ().Value);
\r
341 AssertEquals ("#M28", "6464.6464", Test1.ToString ());
\r
342 AssertEquals ("#M29", "90000.0000", Test2.ToString ());
\r
348 public void ArithmeticOperators()
\r
351 AssertEquals ("#N01", (SqlMoney)96464.6464m, Test1 + Test2);
\r
354 SqlMoney test = SqlMoney.MaxValue + SqlMoney.MaxValue;
\r
356 } catch (Exception e) {
\r
357 AssertEquals ("#N03", typeof (OverflowException), e.GetType ());
\r
361 AssertEquals ("#N04", (SqlMoney)13.9219m, Test2 / Test1);
\r
364 SqlMoney test = Test3 / SqlMoney.Zero;
\r
366 } catch (Exception e) {
\r
367 AssertEquals ("#N06", typeof (DivideByZeroException), e.GetType ());
\r
371 AssertEquals ("#N07", (SqlMoney)581818176m, Test1 * Test2);
\r
374 SqlMoney test = SqlMoney.MaxValue * Test1;
\r
376 } catch (Exception e) {
\r
377 AssertEquals ("#N09", typeof (OverflowException), e.GetType ());
\r
381 AssertEquals ("#N10", (SqlMoney)83535.3536m, Test2 - Test1);
\r
384 SqlMoney test = SqlMoney.MinValue - SqlMoney.MaxValue;
\r
386 } catch (Exception e) {
\r
387 AssertEquals ("#N12", typeof (OverflowException), e.GetType ());
\r
392 public void ThanOrEqualOperators()
\r
395 Assert ("#O01", (Test2 == Test2).Value);
\r
396 Assert ("#O02", !(Test1 == Test2).Value);
\r
397 Assert ("#O03", (Test1 == SqlMoney.Null).IsNull);
\r
400 Assert ("#O04", !(Test2 != Test3).Value);
\r
401 Assert ("#O05", (Test1 != Test3).Value);
\r
402 Assert ("#O06", (Test1 != Test4).Value);
\r
403 Assert ("#O07", (Test1 != SqlMoney.Null).IsNull);
\r
406 Assert ("#O08", (Test1 > Test4).Value);
\r
407 Assert ("#O09", (Test2 > Test1).Value);
\r
408 Assert ("#O10", !(Test2 > Test3).Value);
\r
409 Assert ("#O11", (Test1 > SqlMoney.Null).IsNull);
\r
412 Assert ("#O12", !(Test1 >= Test3).Value);
\r
413 Assert ("#O13", (Test3 >= Test1).Value);
\r
414 Assert ("#O14", (Test2 >= Test3).Value);
\r
415 Assert ("#O15", (Test1 >= SqlMoney.Null).IsNull);
\r
418 Assert ("#O16", !(Test2 < Test1).Value);
\r
419 Assert ("#O17", (Test1 < Test3).Value);
\r
420 Assert ("#O18", !(Test2 < Test3).Value);
\r
421 Assert ("#O19", (Test1 < SqlMoney.Null).IsNull);
\r
424 Assert ("#O20", (Test1 <= Test3).Value);
\r
425 Assert ("#O21", !(Test3 <= Test1).Value);
\r
426 Assert ("#O22", (Test2 <= Test3).Value);
\r
427 Assert ("#O23", (Test1 <= SqlMoney.Null).IsNull);
\r
431 public void UnaryNegation()
\r
434 AssertEquals ("#P01", (decimal)(-6464.6464), -(Test1).Value);
\r
435 AssertEquals ("#P02", 45000.0000M, -(Test4).Value);
\r
439 public void SqlBooleanToSqlMoney()
\r
441 SqlBoolean TestBoolean = new SqlBoolean (true);
\r
443 AssertEquals ("#Q01", 1.0000M, ((SqlMoney)TestBoolean).Value);
\r
444 Assert ("#Q02", ((SqlDecimal)SqlBoolean.Null).IsNull);
\r
448 public void SqlDecimalToSqlMoney()
\r
450 SqlDecimal TestDecimal = new SqlDecimal (4000);
\r
451 SqlDecimal TestDecimal2 = new SqlDecimal (1E+20);
\r
453 SqlMoney TestMoney = (SqlMoney)TestDecimal;
\r
454 AssertEquals ("#R01", 4000.0000M,TestMoney.Value);
\r
457 SqlMoney test = (SqlMoney)TestDecimal2;
\r
459 } catch (Exception e) {
\r
460 AssertEquals ("#R03", typeof (OverflowException), e.GetType ());
\r
465 public void SqlDoubleToSqlMoney()
\r
467 SqlDouble TestDouble = new SqlDouble (1E+9);
\r
468 SqlDouble TestDouble2 = new SqlDouble (1E+20);
\r
470 SqlMoney TestMoney = (SqlMoney)TestDouble;
\r
471 AssertEquals ("#S01", 1000000000.0000m, TestMoney.Value);
\r
474 SqlMoney test = (SqlMoney)TestDouble2;
\r
476 } catch (Exception e) {
\r
477 AssertEquals ("#S03", typeof (OverflowException), e.GetType ());
\r
482 public void SqlMoneyToDecimal()
\r
484 AssertEquals ("#T01", (decimal)6464.6464, (decimal)Test1);
\r
485 AssertEquals ("#T02", -45000.0000M, (decimal)Test4);
\r
489 public void SqlSingleToSqlMoney()
\r
491 SqlSingle TestSingle = new SqlSingle (1e10);
\r
492 SqlSingle TestSingle2 = new SqlSingle (1e20);
\r
494 AssertEquals ("#U01", 10000000000.0000m, ((SqlMoney)TestSingle).Value);
\r
497 SqlMoney test = (SqlMoney)TestSingle2;
\r
499 } catch (Exception e) {
\r
500 AssertEquals ("#U03", typeof (OverflowException), e.GetType());
\r
505 public void SqlStringToSqlMoney()
\r
507 SqlString TestString = new SqlString ("Test string");
\r
508 SqlString TestString100 = new SqlString ("100");
\r
510 AssertEquals ("#V01", 100.0000M, ((SqlMoney)TestString100).Value);
\r
513 SqlMoney test = (SqlMoney)TestString;
\r
515 } catch(Exception e) {
\r
516 AssertEquals ("#V03", typeof (FormatException), e.GetType ());
\r
521 public void DecimalToSqlMoney()
\r
523 decimal TestDecimal = 1e10m;
\r
524 decimal TestDecimal2 = 1e20m;
\r
525 AssertEquals ("#W01", 10000000000.0000M, ((SqlMoney)TestDecimal).Value);
\r
528 SqlMoney test = (SqlMoney)TestDecimal2;
\r
530 } catch (Exception e) {
\r
531 AssertEquals ("#W03", typeof (OverflowException), e.GetType ());
\r
536 public void SqlByteToSqlMoney()
\r
538 SqlByte TestByte = new SqlByte ((byte)200);
\r
539 AssertEquals ("#X01", 200.0000m, ((SqlMoney)TestByte).Value);
\r
543 public void IntsToSqlMoney()
\r
545 SqlInt16 TestInt16 = new SqlInt16 (5000);
\r
546 SqlInt32 TestInt32 = new SqlInt32 (5000);
\r
547 SqlInt64 TestInt64 = new SqlInt64 (5000);
\r
549 AssertEquals ("#Y01", 5000.0000m, ((SqlMoney)TestInt16).Value);
\r
550 AssertEquals ("#Y02", 5000.0000m, ((SqlMoney)TestInt32).Value);
\r
551 AssertEquals ("#Y03", 5000.0000m, ((SqlMoney)TestInt64).Value);
\r
554 SqlMoney test = (SqlMoney)SqlInt64.MaxValue;
\r
556 } catch (Exception e) {
\r
557 AssertEquals ("#Y05", typeof (OverflowException), e.GetType ());
\r