When casting strings to int, use double.Parse() as strings may be floats. With
this commit, issue 1822 should be fixed.0.6.0-stable
parent
d959c65b91
commit
f6fa4ada4e
|
@ -1172,7 +1172,8 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
|
||||
public static explicit operator LSLInteger(LSLString s)
|
||||
{
|
||||
return new LSLInteger(Convert.ToInt32(s.m_string));
|
||||
// double.Parse() used because s could be "123.9" for example.
|
||||
return new LSLInteger(double.Parse(s.m_string));
|
||||
}
|
||||
|
||||
public static explicit operator LSLString(double d)
|
||||
|
@ -1283,7 +1284,8 @@ namespace OpenSim.Region.ScriptEngine.Common
|
|||
|
||||
static public explicit operator LSLInteger(string s)
|
||||
{
|
||||
return new LSLInteger(int.Parse(s));
|
||||
// double.Parse() used because s could be "123.9" for example.
|
||||
return new LSLInteger(double.Parse(s));
|
||||
}
|
||||
|
||||
static public implicit operator LSLInteger(uint u)
|
||||
|
|
|
@ -1172,7 +1172,8 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
|||
|
||||
public static explicit operator LSLInteger(LSLString s)
|
||||
{
|
||||
return new LSLInteger(Convert.ToInt32(s.m_string));
|
||||
// double.Parse() used because s could be "123.9" for example.
|
||||
return new LSLInteger(double.Parse(s.m_string));
|
||||
}
|
||||
|
||||
public static explicit operator LSLString(double d)
|
||||
|
@ -1283,7 +1284,8 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
|||
|
||||
static public explicit operator LSLInteger(string s)
|
||||
{
|
||||
return new LSLInteger(int.Parse(s));
|
||||
// double.Parse() used because s could be "123.9" for example.
|
||||
return new LSLInteger(double.Parse(s));
|
||||
}
|
||||
|
||||
static public implicit operator LSLInteger(uint u)
|
||||
|
|
|
@ -36,6 +36,7 @@ namespace OpenSim.Region.ScriptEngine.Common.Tests
|
|||
public class LSL_TypesTestLSLInteger
|
||||
{
|
||||
private Dictionary<double, int> m_doubleIntSet;
|
||||
private Dictionary<string, int> m_stringIntSet;
|
||||
|
||||
/// <summary>
|
||||
/// Sets up dictionaries and arrays used in the tests.
|
||||
|
@ -51,10 +52,20 @@ namespace OpenSim.Region.ScriptEngine.Common.Tests
|
|||
m_doubleIntSet.Add(-1.0, -1);
|
||||
m_doubleIntSet.Add(999999999.0, 999999999);
|
||||
m_doubleIntSet.Add(-99999999.0, -99999999);
|
||||
|
||||
m_stringIntSet = new Dictionary<string, int>();
|
||||
m_stringIntSet.Add("2", 2);
|
||||
m_stringIntSet.Add("-2", -2);
|
||||
m_stringIntSet.Add("0", 0);
|
||||
m_stringIntSet.Add("1", 1);
|
||||
m_stringIntSet.Add("-1", -1);
|
||||
m_stringIntSet.Add("123.9", 123);
|
||||
m_stringIntSet.Add("999999999", 999999999);
|
||||
m_stringIntSet.Add("-99999999", -99999999);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests LSLInteger is correctly cast explicitly to LSLFloat.
|
||||
/// Tests LSLFloat is correctly cast explicitly to LSLInteger.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestExplicitCastLSLFloatToLSLInteger()
|
||||
|
@ -67,5 +78,35 @@ namespace OpenSim.Region.ScriptEngine.Common.Tests
|
|||
Assert.AreEqual(testInteger.value, number.Value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests string is correctly cast explicitly to LSLInteger.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestExplicitCastStringToLSLInteger()
|
||||
{
|
||||
LSL_Types.LSLInteger testInteger;
|
||||
|
||||
foreach (KeyValuePair<string, int> number in m_stringIntSet)
|
||||
{
|
||||
testInteger = (LSL_Types.LSLInteger) number.Key;
|
||||
Assert.AreEqual(testInteger.value, number.Value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests LSLString is correctly cast explicitly to LSLInteger.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestExplicitCastLSLStringToLSLInteger()
|
||||
{
|
||||
LSL_Types.LSLInteger testInteger;
|
||||
|
||||
foreach (KeyValuePair<string, int> number in m_stringIntSet)
|
||||
{
|
||||
testInteger = (LSL_Types.LSLInteger) new LSL_Types.LSLString(number.Key);
|
||||
Assert.AreEqual(testInteger.value, number.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
public class LSL_TypesTestLSLInteger
|
||||
{
|
||||
private Dictionary<double, int> m_doubleIntSet;
|
||||
private Dictionary<string, int> m_stringIntSet;
|
||||
|
||||
/// <summary>
|
||||
/// Sets up dictionaries and arrays used in the tests.
|
||||
|
@ -51,10 +52,20 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_doubleIntSet.Add(-1.0, -1);
|
||||
m_doubleIntSet.Add(999999999.0, 999999999);
|
||||
m_doubleIntSet.Add(-99999999.0, -99999999);
|
||||
|
||||
m_stringIntSet = new Dictionary<string, int>();
|
||||
m_stringIntSet.Add("2", 2);
|
||||
m_stringIntSet.Add("-2", -2);
|
||||
m_stringIntSet.Add("0", 0);
|
||||
m_stringIntSet.Add("1", 1);
|
||||
m_stringIntSet.Add("-1", -1);
|
||||
m_stringIntSet.Add("123.9", 123);
|
||||
m_stringIntSet.Add("999999999", 999999999);
|
||||
m_stringIntSet.Add("-99999999", -99999999);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests LSLInteger is correctly cast explicitly to LSLFloat.
|
||||
/// Tests LSLFloat is correctly cast explicitly to LSLInteger.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestExplicitCastLSLFloatToLSLInteger()
|
||||
|
@ -67,5 +78,35 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
Assert.AreEqual(testInteger.value, number.Value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests string is correctly cast explicitly to LSLInteger.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestExplicitCastStringToLSLInteger()
|
||||
{
|
||||
LSL_Types.LSLInteger testInteger;
|
||||
|
||||
foreach (KeyValuePair<string, int> number in m_stringIntSet)
|
||||
{
|
||||
testInteger = (LSL_Types.LSLInteger) number.Key;
|
||||
Assert.AreEqual(testInteger.value, number.Value);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests LSLString is correctly cast explicitly to LSLInteger.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestExplicitCastLSLStringToLSLInteger()
|
||||
{
|
||||
LSL_Types.LSLInteger testInteger;
|
||||
|
||||
foreach (KeyValuePair<string, int> number in m_stringIntSet)
|
||||
{
|
||||
testInteger = (LSL_Types.LSLInteger) new LSL_Types.LSLString(number.Key);
|
||||
Assert.AreEqual(testInteger.value, number.Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue