2 // SqlDoubleTest.cs - NUnit Test Cases for System.Data.SqlTypes.SqlDouble
5 // Ville Palo (vi64pa@koti.soon.fi)
6 // Martin Willemoes Hansen (mwh@sysrq.dk)
9 // (C) 2003 Martin Willemoes Hansen
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
;
37 using System
.Data
.SqlTypes
;
38 using System
.Threading
;
39 using System
.Globalization
;
41 namespace MonoTests
.System
.Data
.SqlTypes
44 public class SqlDoubleTest
: Assertion
{
49 Thread
.CurrentThread
.CurrentCulture
= new CultureInfo ("en-US");
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
);
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
);
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
);
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
);
97 AssertEquals ("#D01A", 15E+108, SqlDouble
.Add (Test1
, Test0
).Value
);
98 AssertEquals ("#D02A", 1.5E+109, SqlDouble
.Add (Test1
, Test2
).Value
);
101 SqlDouble test
= SqlDouble
.Add (SqlDouble
.MaxValue
, SqlDouble
.MaxValue
);
103 } catch (Exception e
) {
104 AssertEquals ("#D04A", typeof (OverflowException
), e
.GetType ());
108 AssertEquals ("#D01B", (SqlDouble
)3, SqlDouble
.Divide (Test1
, Test4
));
109 AssertEquals ("#D02B", -13d
, SqlDouble
.Divide (Test2
, Test3
).Value
);
112 SqlDouble test
= SqlDouble
.Divide(Test1
, Test0
).Value
;
114 } catch(Exception e
) {
115 AssertEquals ("#D04B", typeof (DivideByZeroException
), e
.GetType ());
119 AssertEquals ("#D01D", (double)(75E+216), SqlDouble
.Multiply (Test1
, Test4
).Value
);
120 AssertEquals ("#D02D", (double)0, SqlDouble
.Multiply (Test1
, Test0
).Value
);
123 SqlDouble test
= SqlDouble
.Multiply (TestMax
, Test1
);
125 } catch (Exception e
) {
126 AssertEquals ("#D04D", typeof (OverflowException
), e
.GetType ());
131 AssertEquals ("#D01F", (double)1.5E+109, SqlDouble
.Subtract (Test1
, Test3
).Value
);
134 SqlDouble test
= SqlDouble
.Subtract(SqlDouble
.MinValue
, SqlDouble
.MaxValue
);
136 } catch (Exception e
) {
137 AssertEquals ("#D03F", typeof (OverflowException
), e
.GetType ());
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);
156 Test1
.CompareTo (TestString
);
158 } catch(Exception e
) {
159 AssertEquals ("#E06", typeof (ArgumentException
), e
.GetType ());
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
);
182 public void GetHashCodeTest()
184 SqlDouble Test15
= new SqlDouble (15);
186 // FIXME: Better way to test HashCode
187 AssertEquals ("#G01", Test15
.GetHashCode (), Test15
.GetHashCode ());
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 ());
199 public void Greaters()
201 SqlDouble Test1
= new SqlDouble (1e100
);
202 SqlDouble Test11
= new SqlDouble (1e100
);
203 SqlDouble Test2
= new SqlDouble (64e164
);
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
);
217 public void Lessers()
219 SqlDouble Test1
= new SqlDouble (1.8e100
);
220 SqlDouble Test11
= new SqlDouble (1.8e100
);
221 SqlDouble Test2
= new SqlDouble (64e164
);
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
);
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
);
255 SqlDouble
.Parse (null);
257 } catch (Exception e
) {
258 AssertEquals ("#L02", typeof (ArgumentNullException
), e
.GetType ());
262 SqlDouble
.Parse ("not-a-number");
264 } catch (Exception e
) {
266 AssertEquals ("#L04", typeof (FormatException
), e
.GetType ());
270 SqlDouble
.Parse ("9e400");
272 } catch (Exception e
) {
273 AssertEquals ("#L06", typeof (OverflowException
), e
.GetType ());
276 AssertEquals("#L07", (double)150, SqlDouble
.Parse ("150").Value
);
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
;
289 Assert ("#M01A", Test1
.ToSqlBoolean ().Value
);
290 Assert ("#M02A", !Test0
.ToSqlBoolean ().Value
);
291 Assert ("#M03A", TestNull
.ToSqlBoolean ().IsNull
);
294 AssertEquals ("#M01B", (byte)250, Test1
.ToSqlByte ().Value
);
295 AssertEquals ("#M02B", (byte)0, Test0
.ToSqlByte ().Value
);
298 SqlByte b
= (byte)Test2
.ToSqlByte ();
300 } catch (Exception e
) {
301 AssertEquals ("#M04B", typeof (OverflowException
), e
.GetType ());
305 AssertEquals ("#M01C", 250.00000000000000M
, Test1
.ToSqlDecimal ().Value
);
306 AssertEquals ("#M02C", (decimal)0, Test0
.ToSqlDecimal ().Value
);
309 SqlDecimal test
= Test3
.ToSqlDecimal ().Value
;
311 } catch (Exception e
) {
312 AssertEquals ("#M04C", typeof (OverflowException
), e
.GetType ());
316 AssertEquals ("#M01D", (short)250, Test1
.ToSqlInt16 ().Value
);
317 AssertEquals ("#M02D", (short)0, Test0
.ToSqlInt16 ().Value
);
320 SqlInt16 test
= Test2
.ToSqlInt16().Value
;
322 } catch (Exception e
) {
323 AssertEquals ("#M04D", typeof (OverflowException
), e
.GetType ());
327 AssertEquals ("#M01E", (int)250, Test1
.ToSqlInt32 ().Value
);
328 AssertEquals ("#M02E", (int)0, Test0
.ToSqlInt32 ().Value
);
331 SqlInt32 test
= Test2
.ToSqlInt32 ().Value
;
333 } catch (Exception e
) {
334 AssertEquals ("#M04E", typeof (OverflowException
), e
.GetType ());
338 AssertEquals ("#M01F", (long)250, Test1
.ToSqlInt64 ().Value
);
339 AssertEquals ("#M02F", (long)0, Test0
.ToSqlInt64 ().Value
);
342 SqlInt64 test
= Test2
.ToSqlInt64 ().Value
;
344 } catch (Exception e
) {
345 AssertEquals ("#M04F", typeof (OverflowException
), e
.GetType ());
349 AssertEquals ("#M01G", 250.0000M
, Test1
.ToSqlMoney ().Value
);
350 AssertEquals ("#M02G", (decimal)0, Test0
.ToSqlMoney ().Value
);
353 SqlMoney test
= Test2
.ToSqlMoney ().Value
;
355 } catch (Exception e
) {
356 AssertEquals ("#M04G", typeof (OverflowException
), e
.GetType ());
360 AssertEquals ("#M01H", (float)250, Test1
.ToSqlSingle ().Value
);
361 AssertEquals ("#M02H", (float)0, Test0
.ToSqlSingle ().Value
);
364 SqlSingle test
= Test2
.ToSqlSingle().Value
;
366 } catch (Exception e
) {
367 AssertEquals ("#M04H", typeof (OverflowException
), e
.GetType ());
371 AssertEquals ("#M01I", "250", Test1
.ToSqlString ().Value
);
372 AssertEquals ("#M02I", "0", Test0
.ToSqlString ().Value
);
373 AssertEquals ("#M03I", "6.4E+65", Test2
.ToSqlString ().Value
);
376 AssertEquals ("#M01J", "250", Test1
.ToString ());
377 AssertEquals ("#M02J", "0", Test0
.ToString ());
378 AssertEquals ("#M03J", "6.4E+65", Test2
.ToString ());
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);
394 AssertEquals ("#N01", (SqlDouble
)3E+10, Test4
+ Test5
);
397 SqlDouble test
= SqlDouble
.MaxValue
+ SqlDouble
.MaxValue
;
399 } catch (Exception e
) {
400 AssertEquals ("#N03", typeof (OverflowException
), e
.GetType ());
404 AssertEquals ("#N04", (SqlDouble
)2, Test1
/ Test3
);
407 SqlDouble test
= Test3
/ Test0
;
409 } catch (Exception e
) {
410 AssertEquals ("#N06", typeof (DivideByZeroException
), e
.GetType ());
414 AssertEquals ("#N07", (SqlDouble
)2e20
, Test4
* Test5
);
417 SqlDouble test
= SqlDouble
.MaxValue
* Test1
;
419 } catch (Exception e
) {
420 AssertEquals ("#N09", typeof (OverflowException
), e
.GetType ());
424 AssertEquals ("#N10", (SqlDouble
)12e100
, Test1
- Test3
);
427 SqlDouble test
= SqlDouble
.MinValue
- SqlDouble
.MaxValue
;
429 } catch (Exception e
) {
430 AssertEquals ("#N12", typeof (OverflowException
), e
.GetType ());
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);
443 Assert ("#O01", (Test2
== Test22
).Value
);
444 Assert ("#O02", !(Test1
== Test2
).Value
);
445 Assert ("#O03", (Test1
== SqlDouble
.Null
).IsNull
);
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
);
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
);
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
);
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
);
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
);
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
);
488 AssertEquals ("#P02", (double)3000, Result
.Value
);
492 public void SqlBooleanToSqlDouble()
494 SqlBoolean TestBoolean
= new SqlBoolean (true);
497 Result
= (SqlDouble
)TestBoolean
;
499 AssertEquals ("#Q01", (double)1, Result
.Value
);
501 Result
= (SqlDouble
)SqlBoolean
.Null
;
502 Assert ("#Q02", Result
.IsNull
);
506 public void SqlDoubleToDouble()
508 SqlDouble Test
= new SqlDouble (12e12
);
509 Double Result
= (double)Test
;
510 AssertEquals ("#R01", 12e12
, Result
);
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
);
522 SqlDouble test
= (SqlDouble
)TestString
;
524 } catch(Exception e
) {
525 AssertEquals ("#S03", typeof (FormatException
), e
.GetType ());
530 public void DoubleToSqlDouble()
533 SqlDouble Result
= (SqlDouble
)Test1
;
534 AssertEquals ("#T01", 5e64
, Result
.Value
);
538 public void ByteToSqlDouble()
540 short TestShort
= 14;
541 AssertEquals ("#U01", (double)14, ((SqlDouble
)TestShort
).Value
);
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
));
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
);
565 public void SqlMoneyToSqlDouble()
567 SqlMoney TestMoney64
= new SqlMoney(64);
568 AssertEquals ("#X01", (double)64, ((SqlDouble
)TestMoney64
).Value
);
572 public void SqlSingleToSqlDouble()
574 SqlSingle TestSingle64
= new SqlSingle (64);
575 AssertEquals ("#Y01", (double)64, ((SqlDouble
)TestSingle64
).Value
);