Thannk you, ralphos, for a patch to clean up list item type handling
and add a missing explicit cast in Shared/
0.6.0-stable
Melanie Thielker 2008-09-03 18:57:06 +00:00
parent cf7f3df4c2
commit ef27c8817f
4 changed files with 103 additions and 17 deletions

View File

@ -5721,13 +5721,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (remain < 7) if (remain < 7)
return; return;
LSL_Types.LSLInteger flexi = new LSL_Types.LSLInteger(rules.Data[idx++].ToString()); bool flexi = (LSL_Types.LSLInteger)rules.Data[idx++];
int softness = Convert.ToInt32(rules.Data[idx++]); int softness = (LSL_Types.LSLInteger)rules.Data[idx++];
float gravity = (float)Convert.ToDouble(rules.Data[idx++]); float gravity = (float)(LSL_Types.LSLFloat)rules.Data[idx++];
float friction = (float)Convert.ToDouble(rules.Data[idx++]); float friction = (float)(LSL_Types.LSLFloat)rules.Data[idx++];
float wind = (float)Convert.ToDouble(rules.Data[idx++]); float wind = (float)(LSL_Types.LSLFloat)rules.Data[idx++];
float tension = (float)Convert.ToDouble(rules.Data[idx++]); float tension = (float)(LSL_Types.LSLFloat)rules.Data[idx++];
LSL_Types.Vector3 force =new LSL_Types.Vector3(rules.Data[idx++].ToString()); LSL_Types.Vector3 force = (LSL_Types.Vector3)rules.Data[idx++];
SetFlexi(part, flexi, softness, gravity, friction, wind, tension, force); SetFlexi(part, flexi, softness, gravity, friction, wind, tension, force);

View File

@ -1569,9 +1569,14 @@ namespace OpenSim.Region.ScriptEngine.Shared
#region Operators #region Operators
static public explicit operator float(LSLFloat f)
{
return (float)f.value;
}
static public explicit operator int(LSLFloat f) static public explicit operator int(LSLFloat f)
{ {
return (int)f.value; return (int)f.value;
} }
static public explicit operator uint(LSLFloat f) static public explicit operator uint(LSLFloat f)

View File

@ -395,6 +395,26 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
} }
} }
/// <summary>
/// Tests LSLFloat is correctly cast explicitly to float
/// </summary>
[Test]
public void TestExplicitCastLSLFloatToFloat()
{
float testFloat;
float numberAsFloat;
LSL_Types.LSLFloat testLSLFloat;
foreach (double number in m_doubleList)
{
testLSLFloat = new LSL_Types.LSLFloat(number);
numberAsFloat = (float)number;
testFloat = (float)testLSLFloat;
Assert.That((double)testFloat, new DoubleToleranceConstraint((double)numberAsFloat, _lowPrecisionTolerance));
}
}
/// <summary> /// <summary>
/// Tests the equality (==) operator. /// Tests the equality (==) operator.
/// </summary> /// </summary>

View File

@ -84,18 +84,79 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
[Test] [Test]
public void TestConcatenateDouble() public void TestConcatenateDouble()
{ {
LSL_Types.list testList = new LSL_Types.list(1, 'a', "test"); LSL_Types.list testList = new LSL_Types.list(1, 'a', "test");
testList += 2.0; testList += 2.0;
Assert.AreEqual(4, testList.Length); Assert.AreEqual(4, testList.Length);
Assert.AreEqual(2.0, testList.Data[3]); Assert.AreEqual(2.0, testList.Data[3]);
Assert.AreEqual(typeof(double), testList.Data[3].GetType()); Assert.AreEqual(typeof(double), testList.Data[3].GetType());
LSL_Types.list secondTestList = testList + 0.04; LSL_Types.list secondTestList = testList + 0.04;
Assert.AreEqual(5, secondTestList.Length); Assert.AreEqual(5, secondTestList.Length);
Assert.AreEqual(0.04, secondTestList.Data[4]); Assert.AreEqual(0.04, secondTestList.Data[4]);
Assert.AreEqual(typeof(double), secondTestList.Data[4].GetType()); Assert.AreEqual(typeof(double), secondTestList.Data[4].GetType());
} }
/// <summary>
/// Tests casting LSLInteger item to LSLInteger.
/// </summary>
[Test]
public void TestCastLSLIntegerItemToLSLInteger()
{
LSL_Types.LSLInteger testValue = new LSL_Types.LSLInteger(123);
LSL_Types.list testList = new LSL_Types.list(testValue);
Assert.AreEqual(testValue, (LSL_Types.LSLInteger)testList.Data[0]);
}
/// <summary>
/// Tests casting LSLFloat item to LSLFloat.
/// </summary>
[Test]
public void TestCastLSLFloatItemToLSLFloat()
{
LSL_Types.LSLFloat testValue = new LSL_Types.LSLFloat(123.45678987);
LSL_Types.list testList = new LSL_Types.list(testValue);
Assert.AreEqual(testValue, (LSL_Types.LSLFloat)testList.Data[0]);
}
/// <summary>
/// Tests casting LSLString item to LSLString.
/// </summary>
[Test]
public void TestCastLSLStringItemToLSLString()
{
LSL_Types.LSLString testValue = new LSL_Types.LSLString("hello there");
LSL_Types.list testList = new LSL_Types.list(testValue);
Assert.AreEqual(testValue, (LSL_Types.LSLString)testList.Data[0]);
}
/// <summary>
/// Tests casting Vector3 item to Vector3.
/// </summary>
[Test]
public void TestCastVector3ItemToVector3()
{
LSL_Types.Vector3 testValue = new LSL_Types.Vector3(12.34, 56.987654, 0.00987);
LSL_Types.list testList = new LSL_Types.list(testValue);
Assert.AreEqual(testValue, (LSL_Types.Vector3)testList.Data[0]);
}
/// <summary>
/// Tests casting Quaternion item to Quaternion.
/// </summary>
[Test]
public void TestCastQuaternionItemToQuaternion()
{
LSL_Types.Quaternion testValue = new LSL_Types.Quaternion(12.34, 56.44323, 765.983421, 0.00987);
LSL_Types.list testList = new LSL_Types.list(testValue);
Assert.AreEqual(testValue, (LSL_Types.Quaternion)testList.Data[0]);
}
} }
} }