bf3beb47200ad653a5b441ec06d6a6eca21142d9
[mono.git] / mcs / class / corlib / Test / System / SingleTest.cs
1 // 
2 // System.SingleTest.cs - Unit test for Single
3 //      adapted from a subset of DoubleTest.cs
4 //
5 // Authors
6 //      Bob Doan  <bdoan@sicompos.com>
7 //      Sebastien Pouliot  <sebastien@ximian.com>
8 //
9 // Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
10 //
11
12 using System;
13 using System.Globalization;
14 using System.Threading;
15
16 using NUnit.Framework;
17
18 #if !MOBILE
19 using NUnit.Framework.SyntaxHelpers;
20 #endif
21
22 namespace MonoTests.System
23 {
24         [TestFixture]
25         public class SingleTest 
26         {
27                 CultureInfo old_culture;
28
29                 [SetUp]
30                 public void SetUp ()
31                 {
32                         old_culture = Thread.CurrentThread.CurrentCulture;
33                         Thread.CurrentThread.CurrentCulture = new CultureInfo ("en-US", false);
34                 }
35
36                 [TearDown]
37                 public void TearDown ()
38                 {
39                         Thread.CurrentThread.CurrentCulture = old_culture;
40                 }
41
42                 [Test]
43                 public void Equals ()
44                 {
45                         Single s1 = 1f;
46                         Single s2 = 1f;
47                         Assert.IsTrue (s1.Equals (s2), "Equals s1==s2");
48                         Assert.IsTrue (!s1.Equals (Single.NaN), "Equals s1!=NaN");
49
50                         Assert.IsTrue (!Single.NaN.Equals (s2), "Equals NaN=!s2");
51                         Assert.IsTrue (Single.NaN.Equals (Single.NaN), "Equals NaN==NaN");
52
53                         Single p0 = 0.0f;
54                         Single m0 = -0.0f;
55                         Assert.IsTrue (p0.Equals (m0), "0.0==-0.0");
56                         Assert.IsTrue (m0.Equals (p0), "-0.0==0.0");
57                 }
58
59                 [Test]
60                 public void IsInfinity ()
61                 {
62                         Assert.IsTrue ( Single.IsInfinity (Single.PositiveInfinity), "PositiveInfinity");
63                         Assert.IsTrue (Single.IsInfinity (Single.NegativeInfinity), "NegativeInfinity");
64                         Assert.IsTrue (!Single.IsInfinity(12), "12");
65                         Assert.IsTrue (!Single.IsInfinity (Single.NaN), "NaN");
66                 }
67
68                 [Test]
69                 public void IsNan ()
70                 {
71                         Assert.IsTrue (Single.IsNaN (Single.NaN), "Nan");
72                         Assert.IsTrue (!Single.IsNaN (12), "12");
73                         Assert.IsTrue (!Single.IsNaN (Single.PositiveInfinity), "PositiveInfinity");
74                         Assert.IsTrue (!Single.IsNaN (Single.PositiveInfinity), "NegativeInfinity");
75                 }
76
77                 [Test]
78                 public void IsNegativeInfinity ()
79                 {
80                         Assert.IsTrue (Single.IsNegativeInfinity (Single.NegativeInfinity), "IsNegativeInfinity");
81                         Assert.IsTrue (!Single.IsNegativeInfinity (12), "12");
82                         Assert.IsTrue (!Single.IsNegativeInfinity (Single.NaN), "NaN");
83                 }
84
85                 [Test]
86                 public void IsPositiveInfinity ()
87                 {
88                         Assert.IsTrue (Single.IsPositiveInfinity (Single.PositiveInfinity), "PositiveInfinity");
89                         Assert.IsTrue (!Single.IsPositiveInfinity (12), "12");
90                         Assert.IsTrue (!Single.IsPositiveInfinity (Single.NaN), "NaN");
91                 }
92
93                 [Test]
94                 public void ToString_Defaults () 
95                 {
96                         Single i = 254.9f;
97                         // everything defaults to "G"
98                         string def = i.ToString ("G");
99                         Assert.AreEqual (def, i.ToString (), "ToString()");
100                         Assert.AreEqual (def, i.ToString ((IFormatProvider)null), "ToString((IFormatProvider)null)");
101                         Assert.AreEqual (def, i.ToString ((string)null), "ToString((string)null)");
102                         Assert.AreEqual (def, i.ToString (String.Empty), "ToString(empty)");
103                         Assert.AreEqual (def, i.ToString (null, null), "ToString(null,null)");
104                         Assert.AreEqual (def, i.ToString (String.Empty, null), "ToString(empty,null)");
105                         Assert.AreEqual ("254.9", def, "ToString(G)");
106                 }
107
108                 [Test]
109                 public void ToString_Roundtrip ()
110                 {
111                         Assert.AreEqual (10.78f.ToString ("R", NumberFormatInfo.InvariantInfo), "10.78");
112                 }
113
114                 [Test]
115                 public void Parse_Roundtrip ()
116                 {
117                         string maxVal = float.MaxValue.ToString ("r");
118                         string minVal = float.MinValue.ToString ("r");
119                         string epsilon = float.Epsilon.ToString ("r");
120                         string nan = float.NaN.ToString ("r");
121                         string negInf = float.NegativeInfinity.ToString ("r");
122                         string posInf = float.PositiveInfinity.ToString ("r");
123
124                         float result;
125                         Assert.IsTrue (float.TryParse (maxVal, NumberStyles.Float, CultureInfo.CurrentCulture, out result), "MaxValue#1a");
126                         Assert.AreEqual (float.MaxValue, result, "MaxValue#1b");
127                         Assert.IsTrue (float.TryParse (minVal, NumberStyles.Float, CultureInfo.CurrentCulture, out result), "MinValue#1a");
128                         Assert.AreEqual (float.MinValue, result, "MinValue#1b");
129                         Assert.IsTrue (float.TryParse (epsilon, NumberStyles.Float, CultureInfo.CurrentCulture, out result), "Epsilon#1a");
130                         Assert.AreEqual (float.Epsilon, result, "Epsilon#1b");
131                         Assert.IsTrue (float.TryParse (nan, NumberStyles.Float, CultureInfo.CurrentCulture, out result), "NaN#1a");
132                         Assert.AreEqual (float.NaN, result, "NaN#1b");
133                         Assert.That (result, Is.NaN, "NaN#1c");
134                         Assert.IsTrue (float.TryParse (negInf, NumberStyles.Float, CultureInfo.CurrentCulture, out result), "-Inf#1a");
135                         Assert.AreEqual (float.NegativeInfinity, result, "-Inf#1b");
136                         Assert.IsTrue (float.TryParse (posInf, NumberStyles.Float, CultureInfo.CurrentCulture, out result), "+Inf#1a");
137                         Assert.AreEqual (float.PositiveInfinity, result, "+Inf#1b");
138
139                         Assert.AreEqual (float.MaxValue, float.Parse (maxVal), "MaxValue#2");
140                         Assert.AreEqual (float.MinValue, float.Parse (minVal), "MinValue#2");
141                         Assert.AreEqual (float.Epsilon, float.Parse (epsilon), "Epsilon#2");
142                         Assert.AreEqual (float.NaN, float.Parse (nan), "NaN#2a");
143                         Assert.That (float.Parse (nan), Is.NaN, "NaN#2b");
144                         Assert.AreEqual (float.NegativeInfinity, float.Parse (negInf), "-Inf#2");
145                         Assert.AreEqual (float.PositiveInfinity, float.Parse (posInf), "+Inf#2");
146
147                         Assert.AreEqual (float.MaxValue, float.Parse (maxVal, CultureInfo.CurrentCulture), "MaxValue#3");
148                         Assert.AreEqual (float.MinValue, float.Parse (minVal, CultureInfo.CurrentCulture), "MinValue#3");
149                         Assert.AreEqual (float.Epsilon, float.Parse (epsilon, CultureInfo.CurrentCulture), "Epsilon#3");
150                         Assert.AreEqual (float.NaN, float.Parse (nan, CultureInfo.CurrentCulture), "NaN#3a");
151                         Assert.That (float.Parse (nan, CultureInfo.CurrentCulture), Is.NaN, "NaN#3b");
152                         Assert.AreEqual (float.NegativeInfinity, float.Parse (negInf, CultureInfo.CurrentCulture), "-Inf#3");
153                         Assert.AreEqual (float.PositiveInfinity, float.Parse (posInf, CultureInfo.CurrentCulture), "+Inf#3");
154
155                         Assert.AreEqual (float.MaxValue, float.Parse (maxVal, NumberStyles.Float), "MaxValue#4");
156                         Assert.AreEqual (float.MinValue, float.Parse (minVal, NumberStyles.Float), "MinValue#4");
157                         Assert.AreEqual (float.Epsilon, float.Parse (epsilon, NumberStyles.Float), "Epsilon#4");
158                         Assert.AreEqual (float.NaN, float.Parse (nan, NumberStyles.Float), "NaN#4a");
159                         Assert.That (float.Parse (nan, NumberStyles.Float), Is.NaN, "NaN#4b");
160                         Assert.AreEqual (float.NegativeInfinity, float.Parse (negInf, NumberStyles.Float), "-Inf#4");
161                         Assert.AreEqual (float.PositiveInfinity, float.Parse (posInf, NumberStyles.Float), "+Inf#4");
162
163                         Assert.AreEqual (float.MaxValue, float.Parse (maxVal, NumberStyles.Float, CultureInfo.CurrentCulture), "MaxValue#5");
164                         Assert.AreEqual (float.MinValue, float.Parse (minVal, NumberStyles.Float, CultureInfo.CurrentCulture), "MinValue#5");
165                         Assert.AreEqual (float.Epsilon, float.Parse (epsilon, NumberStyles.Float, CultureInfo.CurrentCulture), "Epsilon#5");
166                         Assert.AreEqual (float.NaN, float.Parse (nan, NumberStyles.Float, CultureInfo.CurrentCulture), "NaN#5a");
167                         Assert.That (float.Parse (nan, NumberStyles.Float, CultureInfo.CurrentCulture), Is.NaN, "NaN#5b");
168                         Assert.AreEqual (float.NegativeInfinity, float.Parse (negInf, NumberStyles.Float, CultureInfo.CurrentCulture), "-Inf#5");
169                         Assert.AreEqual (float.PositiveInfinity, float.Parse (posInf, NumberStyles.Float, CultureInfo.CurrentCulture), "+Inf#5");
170                 }
171
172                 [Test] // bug #72221
173                 [ExpectedException (typeof (ArgumentException))]
174                 public void HexNumber_WithHexToParse ()
175                 {
176                         float f;
177                         Single.TryParse ("0dead", NumberStyles.HexNumber, null, out f);
178                 }
179
180                 [Test]
181                 [ExpectedException (typeof (ArgumentException))]
182                 public void HexNumber_NoHexToParse ()
183                 {
184                         float f;
185                         Single.TryParse ("0", NumberStyles.HexNumber, null, out f);
186                 }
187         }
188 }