**** Merged from MCS ****
[mono-project.git] / mcs / class / System.Data / Test / System.Data.SqlTypes / SqlDoubleTest.cs
blob754fa3ba105380bcfb24b52717c5068bd7409f5c
1 //
2 // SqlDoubleTest.cs - NUnit Test Cases for System.Data.SqlTypes.SqlDouble
3 //
4 // Authors:
5 // Ville Palo (vi64pa@koti.soon.fi)
6 // Martin Willemoes Hansen (mwh@sysrq.dk)
7 //
8 // (C) 2002 Ville Palo
9 // (C) 2003 Martin Willemoes Hansen
10 //
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:
22 //
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
25 //
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;
36 using System;
37 using System.Data.SqlTypes;
38 using System.Threading;
39 using System.Globalization;
41 namespace MonoTests.System.Data.SqlTypes
43 [TestFixture]
44 public class SqlDoubleTest : Assertion {
46 [SetUp]
47 public void SetUp ()
49 Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US");
51 // Test constructor
52 [Test]
53 public void Create()
55 SqlDouble Test= new SqlDouble ((double)34.87);
56 AssertEquals ("#A01", 34.87D, Test.Value);
58 Test = new SqlDouble (-9000.6543);
59 AssertEquals ("#A02", -9000.6543D, Test.Value);
62 // Test public fields
63 [Test]
64 public void PublicFields()
66 AssertEquals ("#B01", 1.7976931348623157e+308, SqlDouble.MaxValue.Value);
67 AssertEquals ("#B02", -1.7976931348623157e+308, SqlDouble.MinValue.Value);
68 Assert ("#B03", SqlDouble.Null.IsNull);
69 AssertEquals ("#B04", 0d, SqlDouble.Zero.Value);
72 // Test properties
73 [Test]
74 public void Properties()
76 SqlDouble Test5443 = new SqlDouble (5443e12);
77 SqlDouble Test1 = new SqlDouble (1);
79 Assert ("#C01", SqlDouble.Null.IsNull);
80 AssertEquals ("#C02", 5443e12, Test5443.Value);
81 AssertEquals ("#C03", (double)1, Test1.Value);
84 // PUBLIC METHODS
86 [Test]
87 public void ArithmeticMethods()
89 SqlDouble Test0 = new SqlDouble (0);
90 SqlDouble Test1 = new SqlDouble (15E+108);
91 SqlDouble Test2 = new SqlDouble (-65E+64);
92 SqlDouble Test3 = new SqlDouble (5E+64);
93 SqlDouble Test4 = new SqlDouble (5E+108);
94 SqlDouble TestMax = new SqlDouble (SqlDouble.MaxValue.Value);
96 // Add()
97 AssertEquals ("#D01A", 15E+108, SqlDouble.Add (Test1, Test0).Value);
98 AssertEquals ("#D02A", 1.5E+109, SqlDouble.Add (Test1, Test2).Value);
100 try {
101 SqlDouble test = SqlDouble.Add (SqlDouble.MaxValue, SqlDouble.MaxValue);
102 Fail ("#D03A");
103 } catch (Exception e) {
104 AssertEquals ("#D04A", typeof (OverflowException), e.GetType ());
107 // Divide()
108 AssertEquals ("#D01B", (SqlDouble)3, SqlDouble.Divide (Test1, Test4));
109 AssertEquals ("#D02B", -13d, SqlDouble.Divide (Test2, Test3).Value);
111 try {
112 SqlDouble test = SqlDouble.Divide(Test1, Test0).Value;
113 Fail ("#D03B");
114 } catch(Exception e) {
115 AssertEquals ("#D04B", typeof (DivideByZeroException), e.GetType ());
118 // Multiply()
119 AssertEquals ("#D01D", (double)(75E+216), SqlDouble.Multiply (Test1, Test4).Value);
120 AssertEquals ("#D02D", (double)0, SqlDouble.Multiply (Test1, Test0).Value);
122 try {
123 SqlDouble test = SqlDouble.Multiply (TestMax, Test1);
124 Fail ("#D03D");
125 } catch (Exception e) {
126 AssertEquals ("#D04D", typeof (OverflowException), e.GetType ());
130 // Subtract()
131 AssertEquals ("#D01F", (double)1.5E+109, SqlDouble.Subtract (Test1, Test3).Value);
133 try {
134 SqlDouble test = SqlDouble.Subtract(SqlDouble.MinValue, SqlDouble.MaxValue);
135 Fail ("D02F");
136 } catch (Exception e) {
137 AssertEquals ("#D03F", typeof (OverflowException), e.GetType ());
141 [Test]
142 public void CompareTo()
144 SqlDouble Test1 = new SqlDouble (4e64);
145 SqlDouble Test11 = new SqlDouble (4e64);
146 SqlDouble Test2 = new SqlDouble (-9e34);
147 SqlDouble Test3 = new SqlDouble (10000);
148 SqlString TestString = new SqlString ("This is a test");
150 Assert ("#E01", Test1.CompareTo (Test3) > 0);
151 Assert ("#E02", Test2.CompareTo (Test3) < 0);
152 Assert ("#E03", Test1.CompareTo (Test11) == 0);
153 Assert ("#E04", Test11.CompareTo (SqlDouble.Null) > 0);
155 try {
156 Test1.CompareTo (TestString);
157 Fail("#E05");
158 } catch(Exception e) {
159 AssertEquals ("#E06", typeof (ArgumentException), e.GetType ());
163 [Test]
164 public void EqualsMethods()
166 SqlDouble Test0 = new SqlDouble (0);
167 SqlDouble Test1 = new SqlDouble (1.58e30);
168 SqlDouble Test2 = new SqlDouble (1.8e180);
169 SqlDouble Test22 = new SqlDouble (1.8e180);
171 Assert ("#F01", !Test0.Equals (Test1));
172 Assert ("#F02", !Test1.Equals (Test2));
173 Assert ("#F03", !Test2.Equals (new SqlString ("TEST")));
174 Assert ("#F04", Test2.Equals (Test22));
176 // Static Equals()-method
177 Assert ("#F05", SqlDouble.Equals (Test2, Test22).Value);
178 Assert ("#F06", !SqlDouble.Equals (Test1, Test2).Value);
181 [Test]
182 public void GetHashCodeTest()
184 SqlDouble Test15 = new SqlDouble (15);
186 // FIXME: Better way to test HashCode
187 AssertEquals ("#G01", Test15.GetHashCode (), Test15.GetHashCode ());
190 [Test]
191 public void GetTypeTest()
193 SqlDouble Test = new SqlDouble (84);
194 AssertEquals ("#H01", "System.Data.SqlTypes.SqlDouble", Test.GetType ().ToString ());
195 AssertEquals ("#H02", "System.Double", Test.Value.GetType ().ToString ());
198 [Test]
199 public void Greaters()
201 SqlDouble Test1 = new SqlDouble (1e100);
202 SqlDouble Test11 = new SqlDouble (1e100);
203 SqlDouble Test2 = new SqlDouble (64e164);
205 // GreateThan ()
206 Assert ("#I01", !SqlDouble.GreaterThan (Test1, Test2).Value);
207 Assert ("#I02", SqlDouble.GreaterThan (Test2, Test1).Value);
208 Assert ("#I03", !SqlDouble.GreaterThan (Test1, Test11).Value);
210 // GreaterTharOrEqual ()
211 Assert ("#I04", !SqlDouble.GreaterThanOrEqual (Test1, Test2).Value);
212 Assert ("#I05", SqlDouble.GreaterThanOrEqual (Test2, Test1).Value);
213 Assert ("#I06", SqlDouble.GreaterThanOrEqual (Test1, Test11).Value);
216 [Test]
217 public void Lessers()
219 SqlDouble Test1 = new SqlDouble (1.8e100);
220 SqlDouble Test11 = new SqlDouble (1.8e100);
221 SqlDouble Test2 = new SqlDouble (64e164);
223 // LessThan()
224 Assert ("#J01", !SqlDouble.LessThan (Test1, Test11).Value);
225 Assert ("#J02", !SqlDouble.LessThan (Test2, Test1).Value);
226 Assert ("#J03", SqlDouble.LessThan (Test11, Test2).Value);
228 // LessThanOrEqual ()
229 Assert ("#J04", SqlDouble.LessThanOrEqual (Test1, Test2).Value);
230 Assert ("#J05", !SqlDouble.LessThanOrEqual (Test2, Test1).Value);
231 Assert ("#J06", SqlDouble.LessThanOrEqual (Test11, Test1).Value);
232 Assert ("#J07", SqlDouble.LessThanOrEqual (Test11, SqlDouble.Null).IsNull);
235 [Test]
236 public void NotEquals()
238 SqlDouble Test1 = new SqlDouble (1280000000001);
239 SqlDouble Test2 = new SqlDouble (128e10);
240 SqlDouble Test22 = new SqlDouble (128e10);
242 Assert ("#K01", SqlDouble.NotEquals (Test1, Test2).Value);
243 Assert ("#K02", SqlDouble.NotEquals (Test2, Test1).Value);
244 Assert ("#K03", SqlDouble.NotEquals (Test22, Test1).Value);
245 Assert ("#K04", !SqlDouble.NotEquals (Test22, Test2).Value);
246 Assert ("#K05", !SqlDouble.NotEquals (Test2, Test22).Value);
247 Assert ("#K06", SqlDouble.NotEquals (SqlDouble.Null, Test22).IsNull);
248 Assert ("#K07", SqlDouble.NotEquals (SqlDouble.Null, Test22).IsNull);
251 [Test]
252 public void Parse()
254 try {
255 SqlDouble.Parse (null);
256 Fail ("#L01");
257 } catch (Exception e) {
258 AssertEquals ("#L02", typeof (ArgumentNullException), e.GetType ());
261 try {
262 SqlDouble.Parse ("not-a-number");
263 Fail ("#L03");
264 } catch (Exception e) {
266 AssertEquals ("#L04", typeof (FormatException), e.GetType ());
269 try {
270 SqlDouble.Parse ("9e400");
271 Fail ("#L05");
272 } catch (Exception e) {
273 AssertEquals ("#L06", typeof (OverflowException), e.GetType ());
276 AssertEquals("#L07", (double)150, SqlDouble.Parse ("150").Value);
279 [Test]
280 public void Conversions()
282 SqlDouble Test0 = new SqlDouble (0);
283 SqlDouble Test1 = new SqlDouble (250);
284 SqlDouble Test2 = new SqlDouble (64e64);
285 SqlDouble Test3 = new SqlDouble (64e164);
286 SqlDouble TestNull = SqlDouble.Null;
288 // ToSqlBoolean ()
289 Assert ("#M01A", Test1.ToSqlBoolean ().Value);
290 Assert ("#M02A", !Test0.ToSqlBoolean ().Value);
291 Assert ("#M03A", TestNull.ToSqlBoolean ().IsNull);
293 // ToSqlByte ()
294 AssertEquals ("#M01B", (byte)250, Test1.ToSqlByte ().Value);
295 AssertEquals ("#M02B", (byte)0, Test0.ToSqlByte ().Value);
297 try {
298 SqlByte b = (byte)Test2.ToSqlByte ();
299 Fail ("#M03B");
300 } catch (Exception e) {
301 AssertEquals ("#M04B", typeof (OverflowException), e.GetType ());
304 // ToSqlDecimal ()
305 AssertEquals ("#M01C", 250.00000000000000M, Test1.ToSqlDecimal ().Value);
306 AssertEquals ("#M02C", (decimal)0, Test0.ToSqlDecimal ().Value);
308 try {
309 SqlDecimal test = Test3.ToSqlDecimal ().Value;
310 Fail ("#M03C");
311 } catch (Exception e) {
312 AssertEquals ("#M04C", typeof (OverflowException), e.GetType ());
315 // ToSqlInt16 ()
316 AssertEquals ("#M01D", (short)250, Test1.ToSqlInt16 ().Value);
317 AssertEquals ("#M02D", (short)0, Test0.ToSqlInt16 ().Value);
319 try {
320 SqlInt16 test = Test2.ToSqlInt16().Value;
321 Fail ("#M03D");
322 } catch (Exception e) {
323 AssertEquals ("#M04D", typeof (OverflowException), e.GetType ());
326 // ToSqlInt32 ()
327 AssertEquals ("#M01E", (int)250, Test1.ToSqlInt32 ().Value);
328 AssertEquals ("#M02E", (int)0, Test0.ToSqlInt32 ().Value);
330 try {
331 SqlInt32 test = Test2.ToSqlInt32 ().Value;
332 Fail ("#M03E");
333 } catch (Exception e) {
334 AssertEquals ("#M04E", typeof (OverflowException), e.GetType ());
337 // ToSqlInt64 ()
338 AssertEquals ("#M01F", (long)250, Test1.ToSqlInt64 ().Value);
339 AssertEquals ("#M02F", (long)0, Test0.ToSqlInt64 ().Value);
341 try {
342 SqlInt64 test = Test2.ToSqlInt64 ().Value;
343 Fail ("#M03F");
344 } catch (Exception e) {
345 AssertEquals ("#M04F", typeof (OverflowException), e.GetType ());
348 // ToSqlMoney ()
349 AssertEquals ("#M01G", 250.0000M, Test1.ToSqlMoney ().Value);
350 AssertEquals ("#M02G", (decimal)0, Test0.ToSqlMoney ().Value);
352 try {
353 SqlMoney test = Test2.ToSqlMoney ().Value;
354 Fail ("#M03G");
355 } catch (Exception e) {
356 AssertEquals ("#M04G", typeof (OverflowException), e.GetType ());
359 // ToSqlSingle ()
360 AssertEquals ("#M01H", (float)250, Test1.ToSqlSingle ().Value);
361 AssertEquals ("#M02H", (float)0, Test0.ToSqlSingle ().Value);
363 try {
364 SqlSingle test = Test2.ToSqlSingle().Value;
365 Fail ("#MO3H");
366 } catch (Exception e) {
367 AssertEquals ("#M04H", typeof (OverflowException), e.GetType ());
370 // ToSqlString ()
371 AssertEquals ("#M01I", "250", Test1.ToSqlString ().Value);
372 AssertEquals ("#M02I", "0", Test0.ToSqlString ().Value);
373 AssertEquals ("#M03I", "6.4E+65", Test2.ToSqlString ().Value);
375 // ToString ()
376 AssertEquals ("#M01J", "250", Test1.ToString ());
377 AssertEquals ("#M02J", "0", Test0.ToString ());
378 AssertEquals ("#M03J", "6.4E+65", Test2.ToString ());
381 // OPERATORS
383 [Test]
384 public void ArithmeticOperators()
386 SqlDouble Test0 = new SqlDouble (0);
387 SqlDouble Test1 = new SqlDouble (24E+100);
388 SqlDouble Test2 = new SqlDouble (64E+164);
389 SqlDouble Test3 = new SqlDouble (12E+100);
390 SqlDouble Test4 = new SqlDouble (1E+10);
391 SqlDouble Test5 = new SqlDouble (2E+10);
393 // "+"-operator
394 AssertEquals ("#N01", (SqlDouble)3E+10, Test4 + Test5);
396 try {
397 SqlDouble test = SqlDouble.MaxValue + SqlDouble.MaxValue;
398 Fail ("#N02");
399 } catch (Exception e) {
400 AssertEquals ("#N03", typeof (OverflowException), e.GetType ());
403 // "/"-operator
404 AssertEquals ("#N04", (SqlDouble)2, Test1 / Test3);
406 try {
407 SqlDouble test = Test3 / Test0;
408 Fail ("#N05");
409 } catch (Exception e) {
410 AssertEquals ("#N06", typeof (DivideByZeroException), e.GetType ());
413 // "*"-operator
414 AssertEquals ("#N07", (SqlDouble)2e20, Test4 * Test5);
416 try {
417 SqlDouble test = SqlDouble.MaxValue * Test1;
418 Fail ("#N08");
419 } catch (Exception e) {
420 AssertEquals ("#N09", typeof (OverflowException), e.GetType ());
423 // "-"-operator
424 AssertEquals ("#N10", (SqlDouble)12e100, Test1 - Test3);
426 try {
427 SqlDouble test = SqlDouble.MinValue - SqlDouble.MaxValue;
428 Fail ("#N11");
429 } catch (Exception e) {
430 AssertEquals ("#N12", typeof (OverflowException), e.GetType ());
434 [Test]
435 public void ThanOrEqualOperators()
437 SqlDouble Test1 = new SqlDouble (1E+164);
438 SqlDouble Test2 = new SqlDouble (9.7E+100);
439 SqlDouble Test22 = new SqlDouble (9.7E+100);
440 SqlDouble Test3 = new SqlDouble (2E+200);
442 // == -operator
443 Assert ("#O01", (Test2 == Test22).Value);
444 Assert ("#O02", !(Test1 == Test2).Value);
445 Assert ("#O03", (Test1 == SqlDouble.Null).IsNull);
447 // != -operator
448 Assert ("#O04", !(Test2 != Test22).Value);
449 Assert ("#O05", (Test2 != Test3).Value);
450 Assert ("#O06", (Test1 != Test3).Value);
451 Assert ("#O07", (Test1 != SqlDouble.Null).IsNull);
453 // > -operator
454 Assert ("#O08", (Test1 > Test2).Value);
455 Assert ("#O09", !(Test1 > Test3).Value);
456 Assert ("#O10", !(Test2 > Test22).Value);
457 Assert ("#O11", (Test1 > SqlDouble.Null).IsNull);
459 // >= -operator
460 Assert ("#O12", !(Test1 >= Test3).Value);
461 Assert ("#O13", (Test3 >= Test1).Value);
462 Assert ("#O14", (Test2 >= Test22).Value);
463 Assert ("#O15", (Test1 >= SqlDouble.Null).IsNull);
465 // < -operator
466 Assert ("#O16", !(Test1 < Test2).Value);
467 Assert ("#O17", (Test1 < Test3).Value);
468 Assert ("#O18", !(Test2 < Test22).Value);
469 Assert ("#O19", (Test1 < SqlDouble.Null).IsNull);
471 // <= -operator
472 Assert ("#O20", (Test1 <= Test3).Value);
473 Assert ("#O21", !(Test3 <= Test1).Value);
474 Assert ("#O22", (Test2 <= Test22).Value);
475 Assert ("#O23", (Test1 <= SqlDouble.Null).IsNull);
478 [Test]
479 public void UnaryNegation()
481 SqlDouble Test = new SqlDouble (2000000001);
482 SqlDouble TestNeg = new SqlDouble (-3000);
484 SqlDouble Result = -Test;
485 AssertEquals ("#P01", (double)(-2000000001), Result.Value);
487 Result = -TestNeg;
488 AssertEquals ("#P02", (double)3000, Result.Value);
491 [Test]
492 public void SqlBooleanToSqlDouble()
494 SqlBoolean TestBoolean = new SqlBoolean (true);
495 SqlDouble Result;
497 Result = (SqlDouble)TestBoolean;
499 AssertEquals ("#Q01", (double)1, Result.Value);
501 Result = (SqlDouble)SqlBoolean.Null;
502 Assert ("#Q02", Result.IsNull);
505 [Test]
506 public void SqlDoubleToDouble()
508 SqlDouble Test = new SqlDouble (12e12);
509 Double Result = (double)Test;
510 AssertEquals ("#R01", 12e12, Result);
513 [Test]
514 public void SqlStringToSqlDouble()
516 SqlString TestString = new SqlString ("Test string");
517 SqlString TestString100 = new SqlString ("100");
519 AssertEquals ("#S01", (double)100, ((SqlDouble)TestString100).Value);
521 try {
522 SqlDouble test = (SqlDouble)TestString;
523 Fail ("#S02");
524 } catch(Exception e) {
525 AssertEquals ("#S03", typeof (FormatException), e.GetType ());
529 [Test]
530 public void DoubleToSqlDouble()
532 double Test1 = 5e64;
533 SqlDouble Result = (SqlDouble)Test1;
534 AssertEquals ("#T01", 5e64, Result.Value);
537 [Test]
538 public void ByteToSqlDouble()
540 short TestShort = 14;
541 AssertEquals ("#U01", (double)14, ((SqlDouble)TestShort).Value);
544 [Test]
545 public void SqlDecimalToSqlDouble()
547 SqlDecimal TestDecimal64 = new SqlDecimal (64);
549 AssertEquals ("#V01", (double)64, ((SqlDouble)TestDecimal64).Value);
550 AssertEquals ("#V02", SqlDouble.Null, ((SqlDouble)SqlDecimal.Null));
553 [Test]
554 public void SqlIntToSqlDouble()
556 SqlInt16 Test64 = new SqlInt16 (64);
557 SqlInt32 Test640 = new SqlInt32 (640);
558 SqlInt64 Test64000 = new SqlInt64 (64000);
559 AssertEquals ("#W01", (double)64, ((SqlDouble)Test64).Value);
560 AssertEquals ("#W02", (double)640, ((SqlDouble)Test640).Value);
561 AssertEquals ("#W03", (double)64000, ((SqlDouble)Test64000).Value);
564 [Test]
565 public void SqlMoneyToSqlDouble()
567 SqlMoney TestMoney64 = new SqlMoney(64);
568 AssertEquals ("#X01", (double)64, ((SqlDouble)TestMoney64).Value);
571 [Test]
572 public void SqlSingleToSqlDouble()
574 SqlSingle TestSingle64 = new SqlSingle (64);
575 AssertEquals ("#Y01", (double)64, ((SqlDouble)TestSingle64).Value);