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