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