From ce0a8d7beffccbaeb6b603a96b7729278c4c9e75 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Mon, 8 Sep 2008 20:34:45 +0000 Subject: changes to Test directory structure per opensim-dev conversation --- .../Common/Tests/LSL_TypesTestLSLFloat.cs | 583 +++++++++++++++++++++ .../Common/Tests/LSL_TypesTestLSLInteger.cs | 133 +++++ .../Common/Tests/LSL_TypesTestLSLString.cs | 136 +++++ .../ScriptEngine/Common/Tests/LSL_TypesTestList.cs | 101 ++++ .../Common/Tests/LSL_TypesTestVector3.cs | 69 +++ 5 files changed, 1022 insertions(+) create mode 100644 OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLFloat.cs create mode 100644 OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLInteger.cs create mode 100644 OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLString.cs create mode 100644 OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestList.cs create mode 100644 OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestVector3.cs (limited to 'OpenSim/Region/ScriptEngine/Common') diff --git a/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLFloat.cs b/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLFloat.cs new file mode 100644 index 0000000..d89bb87 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLFloat.cs @@ -0,0 +1,583 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using NUnit.Framework; +using OpenSim.Tests.Common; +using OpenSim.Region.ScriptEngine.Common; + +namespace OpenSim.Region.ScriptEngine.Common.Tests +{ + [TestFixture] + public class LSL_TypesTestLSLFloat + { + // Used for testing equality of two floats. + private double _lowPrecisionTolerance = 0.000001; + + private Dictionary m_intDoubleSet; + private Dictionary m_doubleDoubleSet; + private Dictionary m_doubleIntSet; + private Dictionary m_doubleUintSet; + private Dictionary m_stringDoubleSet; + private Dictionary m_doubleStringSet; + private List m_intList; + private List m_doubleList; + + /// + /// Sets up dictionaries and arrays used in the tests. + /// + [TestFixtureSetUp] + public void SetUpDataSets() + { + m_intDoubleSet = new Dictionary(); + m_intDoubleSet.Add(2, 2.0); + m_intDoubleSet.Add(-2, -2.0); + m_intDoubleSet.Add(0, 0.0); + m_intDoubleSet.Add(1, 1.0); + m_intDoubleSet.Add(-1, -1.0); + m_intDoubleSet.Add(999999999, 999999999.0); + m_intDoubleSet.Add(-99999999, -99999999.0); + + m_doubleDoubleSet = new Dictionary(); + m_doubleDoubleSet.Add(2.0, 2.0); + m_doubleDoubleSet.Add(-2.0, -2.0); + m_doubleDoubleSet.Add(0.0, 0.0); + m_doubleDoubleSet.Add(1.0, 1.0); + m_doubleDoubleSet.Add(-1.0, -1.0); + m_doubleDoubleSet.Add(999999999.0, 999999999.0); + m_doubleDoubleSet.Add(-99999999.0, -99999999.0); + m_doubleDoubleSet.Add(0.5, 0.5); + m_doubleDoubleSet.Add(0.0005, 0.0005); + m_doubleDoubleSet.Add(0.6805, 0.6805); + m_doubleDoubleSet.Add(-0.5, -0.5); + m_doubleDoubleSet.Add(-0.0005, -0.0005); + m_doubleDoubleSet.Add(-0.6805, -0.6805); + m_doubleDoubleSet.Add(548.5, 548.5); + m_doubleDoubleSet.Add(2.0005, 2.0005); + m_doubleDoubleSet.Add(349485435.6805, 349485435.6805); + m_doubleDoubleSet.Add(-548.5, -548.5); + m_doubleDoubleSet.Add(-2.0005, -2.0005); + m_doubleDoubleSet.Add(-349485435.6805, -349485435.6805); + + m_doubleIntSet = new Dictionary(); + m_doubleIntSet.Add(2.0, 2); + m_doubleIntSet.Add(-2.0, -2); + m_doubleIntSet.Add(0.0, 0); + m_doubleIntSet.Add(1.0, 1); + m_doubleIntSet.Add(-1.0, -1); + m_doubleIntSet.Add(999999999.0, 999999999); + m_doubleIntSet.Add(-99999999.0, -99999999); + m_doubleIntSet.Add(0.5, 0); + m_doubleIntSet.Add(0.0005, 0); + m_doubleIntSet.Add(0.6805, 0); + m_doubleIntSet.Add(-0.5, 0); + m_doubleIntSet.Add(-0.0005, 0); + m_doubleIntSet.Add(-0.6805, 0); + m_doubleIntSet.Add(548.5, 548); + m_doubleIntSet.Add(2.0005, 2); + m_doubleIntSet.Add(349485435.6805, 349485435); + m_doubleIntSet.Add(-548.5, -548); + m_doubleIntSet.Add(-2.0005, -2); + m_doubleIntSet.Add(-349485435.6805, -349485435); + + m_doubleUintSet = new Dictionary(); + m_doubleUintSet.Add(2.0, 2); + m_doubleUintSet.Add(-2.0, 2); + m_doubleUintSet.Add(0.0, 0); + m_doubleUintSet.Add(1.0, 1); + m_doubleUintSet.Add(-1.0, 1); + m_doubleUintSet.Add(999999999.0, 999999999); + m_doubleUintSet.Add(-99999999.0, 99999999); + m_doubleUintSet.Add(0.5, 0); + m_doubleUintSet.Add(0.0005, 0); + m_doubleUintSet.Add(0.6805, 0); + m_doubleUintSet.Add(-0.5, 0); + m_doubleUintSet.Add(-0.0005, 0); + m_doubleUintSet.Add(-0.6805, 0); + m_doubleUintSet.Add(548.5, 548); + m_doubleUintSet.Add(2.0005, 2); + m_doubleUintSet.Add(349485435.6805, 349485435); + m_doubleUintSet.Add(-548.5, 548); + m_doubleUintSet.Add(-2.0005, 2); + m_doubleUintSet.Add(-349485435.6805, 349485435); + + m_stringDoubleSet = new Dictionary(); + m_stringDoubleSet.Add("2", 2.0); + m_stringDoubleSet.Add("-2", -2.0); + m_stringDoubleSet.Add("1", 1.0); + m_stringDoubleSet.Add("-1", -1.0); + m_stringDoubleSet.Add("0", 0.0); + m_stringDoubleSet.Add("999999999.0", 999999999.0); + m_stringDoubleSet.Add("-99999999.0", -99999999.0); + m_stringDoubleSet.Add("0.5", 0.5); + m_stringDoubleSet.Add("0.0005", 0.0005); + m_stringDoubleSet.Add("0.6805", 0.6805); + m_stringDoubleSet.Add("-0.5", -0.5); + m_stringDoubleSet.Add("-0.0005", -0.0005); + m_stringDoubleSet.Add("-0.6805", -0.6805); + m_stringDoubleSet.Add("548.5", 548.5); + m_stringDoubleSet.Add("2.0005", 2.0005); + m_stringDoubleSet.Add("349485435.6805", 349485435.6805); + m_stringDoubleSet.Add("-548.5", -548.5); + m_stringDoubleSet.Add("-2.0005", -2.0005); + m_stringDoubleSet.Add("-349485435.6805", -349485435.6805); + + m_doubleStringSet = new Dictionary(); + m_doubleStringSet.Add(2.0, "2.000000"); + m_doubleStringSet.Add(-2.0, "-2.000000"); + m_doubleStringSet.Add(1.0, "1.000000"); + m_doubleStringSet.Add(-1.0, "-1.000000"); + m_doubleStringSet.Add(0.0, "0.000000"); + m_doubleStringSet.Add(999999999.0, "999999999.000000"); + m_doubleStringSet.Add(-99999999.0, "-99999999.000000"); + m_doubleStringSet.Add(0.5, "0.500000"); + m_doubleStringSet.Add(0.0005, "0.000500"); + m_doubleStringSet.Add(0.6805, "0.680500"); + m_doubleStringSet.Add(-0.5, "-0.500000"); + m_doubleStringSet.Add(-0.0005, "-0.000500"); + m_doubleStringSet.Add(-0.6805, "-0.680500"); + m_doubleStringSet.Add(548.5, "548.500000"); + m_doubleStringSet.Add(2.0005, "2.000500"); + m_doubleStringSet.Add(349485435.6805, "349485435.680500"); + m_doubleStringSet.Add(-548.5, "-548.500000"); + m_doubleStringSet.Add(-2.0005, "-2.000500"); + m_doubleStringSet.Add(-349485435.6805, "-349485435.680500"); + + m_doubleList = new List(); + m_doubleList.Add(2.0); + m_doubleList.Add(-2.0); + m_doubleList.Add(1.0); + m_doubleList.Add(-1.0); + m_doubleList.Add(999999999.0); + m_doubleList.Add(-99999999.0); + m_doubleList.Add(0.5); + m_doubleList.Add(0.0005); + m_doubleList.Add(0.6805); + m_doubleList.Add(-0.5); + m_doubleList.Add(-0.0005); + m_doubleList.Add(-0.6805); + m_doubleList.Add(548.5); + m_doubleList.Add(2.0005); + m_doubleList.Add(349485435.6805); + m_doubleList.Add(-548.5); + m_doubleList.Add(-2.0005); + m_doubleList.Add(-349485435.6805); + + m_intList = new List(); + m_intList.Add(2); + m_intList.Add(-2); + m_intList.Add(0); + m_intList.Add(1); + m_intList.Add(-1); + m_intList.Add(999999999); + m_intList.Add(-99999999); + } + + /// + /// Tests constructing a LSLFloat from an integer. + /// + [Test] + public void TestConstructFromInt() + { + LSL_Types.LSLFloat testFloat; + + foreach (KeyValuePair number in m_intDoubleSet) + { + testFloat = new LSL_Types.LSLFloat(number.Key); + Assert.That(testFloat.value, new DoubleToleranceConstraint(number.Value, _lowPrecisionTolerance)); + } + } + + /// + /// Tests constructing a LSLFloat from a double. + /// + [Test] + public void TestConstructFromDouble() + { + LSL_Types.LSLFloat testFloat; + + foreach (KeyValuePair number in m_doubleDoubleSet) + { + testFloat = new LSL_Types.LSLFloat(number.Key); + Assert.That(testFloat.value, new DoubleToleranceConstraint(number.Value, _lowPrecisionTolerance)); + } + } + + /// + /// Tests LSLFloat is correctly cast explicitly to integer. + /// + [Test] + public void TestExplicitCastLSLFloatToInt() + { + int testNumber; + + foreach (KeyValuePair number in m_doubleIntSet) + { + testNumber = (int) new LSL_Types.LSLFloat(number.Key); + Assert.AreEqual(number.Value, testNumber, "Converting double " + number.Key + ", expecting int " + number.Value); + } + } + + /// + /// Tests LSLFloat is correctly cast explicitly to unsigned integer. + /// + [Test] + public void TestExplicitCastLSLFloatToUint() + { + uint testNumber; + + foreach (KeyValuePair number in m_doubleUintSet) + { + testNumber = (uint) new LSL_Types.LSLFloat(number.Key); + Assert.AreEqual(number.Value, testNumber, "Converting double " + number.Key + ", expecting uint " + number.Value); + } + } + + /// + /// Tests LSLFloat is correctly cast implicitly to Boolean if non-zero. + /// + [Test] + public void TestImplicitCastLSLFloatToBooleanTrue() + { + LSL_Types.LSLFloat testFloat; + bool testBool; + + foreach (double number in m_doubleList) + { + testFloat = new LSL_Types.LSLFloat(number); + testBool = testFloat; + + Assert.IsTrue(testBool); + } + } + + /// + /// Tests LSLFloat is correctly cast implicitly to Boolean if zero. + /// + [Test] + public void TestImplicitCastLSLFloatToBooleanFalse() + { + LSL_Types.LSLFloat testFloat = new LSL_Types.LSLFloat(0.0); + bool testBool = testFloat; + + Assert.IsFalse(testBool); + } + + /// + /// Tests integer is correctly cast implicitly to LSLFloat. + /// + [Test] + public void TestImplicitCastIntToLSLFloat() + { + LSL_Types.LSLFloat testFloat; + + foreach (int number in m_intList) + { + testFloat = number; + Assert.That(testFloat.value, new DoubleToleranceConstraint(number, _lowPrecisionTolerance)); + } + } + + /// + /// Tests LSLInteger is correctly cast implicitly to LSLFloat. + /// + [Test] + public void TestImplicitCastLSLIntegerToLSLFloat() + { + LSL_Types.LSLFloat testFloat; + + foreach (int number in m_intList) + { + testFloat = new LSL_Types.LSLInteger(number); + Assert.That(testFloat.value, new DoubleToleranceConstraint(number, _lowPrecisionTolerance)); + } + } + + /// + /// Tests LSLInteger is correctly cast explicitly to LSLFloat. + /// + [Test] + public void TestExplicitCastLSLIntegerToLSLFloat() + { + LSL_Types.LSLFloat testFloat; + + foreach (int number in m_intList) + { + testFloat = (LSL_Types.LSLFloat) new LSL_Types.LSLInteger(number); + Assert.That(testFloat.value, new DoubleToleranceConstraint(number, _lowPrecisionTolerance)); + } + } + + /// + /// Tests string is correctly cast explicitly to LSLFloat. + /// + [Test] + public void TestExplicitCastStringToLSLFloat() + { + LSL_Types.LSLFloat testFloat; + + foreach (KeyValuePair number in m_stringDoubleSet) + { + testFloat = (LSL_Types.LSLFloat) number.Key; + Assert.That(testFloat.value, new DoubleToleranceConstraint(number.Value, _lowPrecisionTolerance)); + } + } + + /// + /// Tests LSLString is correctly cast implicitly to LSLFloat. + /// + [Test] + public void TestExplicitCastLSLStringToLSLFloat() + { + LSL_Types.LSLFloat testFloat; + + foreach (KeyValuePair number in m_stringDoubleSet) + { + testFloat = (LSL_Types.LSLFloat) new LSL_Types.LSLString(number.Key); + Assert.That(testFloat.value, new DoubleToleranceConstraint(number.Value, _lowPrecisionTolerance)); + } + } + + /// + /// Tests double is correctly cast implicitly to LSLFloat. + /// + [Test] + public void TestImplicitCastDoubleToLSLFloat() + { + LSL_Types.LSLFloat testFloat; + + foreach (double number in m_doubleList) + { + testFloat = number; + Assert.That(testFloat.value, new DoubleToleranceConstraint(number, _lowPrecisionTolerance)); + } + } + + /// + /// Tests LSLFloat is correctly cast implicitly to double. + /// + [Test] + public void TestImplicitCastLSLFloatToDouble() + { + double testNumber; + LSL_Types.LSLFloat testFloat; + + foreach (double number in m_doubleList) + { + testFloat = new LSL_Types.LSLFloat(number); + testNumber = testFloat; + + Assert.That(testNumber, new DoubleToleranceConstraint(number, _lowPrecisionTolerance)); + } + } + + /// + /// Tests the equality (==) operator. + /// + [Test] + public void TestEqualsOperator() + { + LSL_Types.LSLFloat testFloatA, testFloatB; + + foreach (double number in m_doubleList) + { + testFloatA = new LSL_Types.LSLFloat(number); + testFloatB = new LSL_Types.LSLFloat(number); + Assert.IsTrue(testFloatA == testFloatB); + + testFloatB = new LSL_Types.LSLFloat(number + 1.0); + Assert.IsFalse(testFloatA == testFloatB); + } + } + + /// + /// Tests the inequality (!=) operator. + /// + [Test] + public void TestNotEqualOperator() + { + LSL_Types.LSLFloat testFloatA, testFloatB; + + foreach (double number in m_doubleList) + { + testFloatA = new LSL_Types.LSLFloat(number); + testFloatB = new LSL_Types.LSLFloat(number + 1.0); + Assert.IsTrue(testFloatA != testFloatB); + + testFloatB = new LSL_Types.LSLFloat(number); + Assert.IsFalse(testFloatA != testFloatB); + } + } + + /// + /// Tests the increment operator. + /// + [Test] + public void TestIncrementOperator() + { + LSL_Types.LSLFloat testFloat; + double testNumber; + + foreach (double number in m_doubleList) + { + testFloat = new LSL_Types.LSLFloat(number); + + testNumber = testFloat++; + Assert.That(testNumber, new DoubleToleranceConstraint(number, _lowPrecisionTolerance)); + + testNumber = testFloat; + Assert.That(testNumber, new DoubleToleranceConstraint(number + 1.0, _lowPrecisionTolerance)); + + testNumber = ++testFloat; + Assert.That(testNumber, new DoubleToleranceConstraint(number + 2.0, _lowPrecisionTolerance)); + } + } + + /// + /// Tests the decrement operator. + /// + [Test] + public void TestDecrementOperator() + { + LSL_Types.LSLFloat testFloat; + double testNumber; + + foreach (double number in m_doubleList) + { + testFloat = new LSL_Types.LSLFloat(number); + + testNumber = testFloat--; + Assert.That(testNumber, new DoubleToleranceConstraint(number, _lowPrecisionTolerance)); + + testNumber = testFloat; + Assert.That(testNumber, new DoubleToleranceConstraint(number - 1.0, _lowPrecisionTolerance)); + + testNumber = --testFloat; + Assert.That(testNumber, new DoubleToleranceConstraint(number - 2.0, _lowPrecisionTolerance)); + } + } + + /// + /// Tests LSLFloat.ToString(). + /// + [Test] + public void TestToString() + { + LSL_Types.LSLFloat testFloat; + + foreach (KeyValuePair number in m_doubleStringSet) + { + testFloat = new LSL_Types.LSLFloat(number.Key); + Assert.AreEqual(number.Value, testFloat.ToString()); + } + } + + /// + /// Tests addition of two LSLFloats. + /// + [Test] + public void TestAddTwoLSLFloats() + { + LSL_Types.LSLFloat testResult; + + foreach (KeyValuePair number in m_doubleDoubleSet) + { + testResult = new LSL_Types.LSLFloat(number.Key) + new LSL_Types.LSLFloat(number.Value); + Assert.That(testResult.value, new DoubleToleranceConstraint(number.Key + number.Value, _lowPrecisionTolerance)); + } + } + + /// + /// Tests subtraction of two LSLFloats. + /// + [Test] + public void TestSubtractTwoLSLFloats() + { + LSL_Types.LSLFloat testResult; + + foreach (KeyValuePair number in m_doubleDoubleSet) + { + testResult = new LSL_Types.LSLFloat(number.Key) - new LSL_Types.LSLFloat(number.Value); + Assert.That(testResult.value, new DoubleToleranceConstraint(number.Key - number.Value, _lowPrecisionTolerance)); + } + } + + /// + /// Tests multiplication of two LSLFloats. + /// + [Test] + public void TestMultiplyTwoLSLFloats() + { + LSL_Types.LSLFloat testResult; + + foreach (KeyValuePair number in m_doubleDoubleSet) + { + testResult = new LSL_Types.LSLFloat(number.Key) * new LSL_Types.LSLFloat(number.Value); + Assert.That(testResult.value, new DoubleToleranceConstraint(number.Key * number.Value, _lowPrecisionTolerance)); + } + } + + /// + /// Tests division of two LSLFloats. + /// + [Test] + public void TestDivideTwoLSLFloats() + { + LSL_Types.LSLFloat testResult; + + foreach (KeyValuePair number in m_doubleDoubleSet) + { + if (number.Value != 0.0) // Let's avoid divide by zero. + { + testResult = new LSL_Types.LSLFloat(number.Key) / new LSL_Types.LSLFloat(number.Value); + Assert.That(testResult.value, new DoubleToleranceConstraint(number.Key / number.Value, _lowPrecisionTolerance)); + } + } + } + + /// + /// Tests boolean correctly cast implicitly to LSLFloat. + /// + [Test] + public void TestImplicitCastBooleanToLSLFloat() + { + LSL_Types.LSLFloat testFloat; + + testFloat = (1 == 0); + Assert.That(testFloat.value, new DoubleToleranceConstraint(0.0, _lowPrecisionTolerance)); + + testFloat = (1 == 1); + Assert.That(testFloat.value, new DoubleToleranceConstraint(1.0, _lowPrecisionTolerance)); + + testFloat = false; + Assert.That(testFloat.value, new DoubleToleranceConstraint(0.0, _lowPrecisionTolerance)); + + testFloat = true; + Assert.That(testFloat.value, new DoubleToleranceConstraint(1.0, _lowPrecisionTolerance)); + } + } +} diff --git a/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLInteger.cs b/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLInteger.cs new file mode 100644 index 0000000..d2839db --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLInteger.cs @@ -0,0 +1,133 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using NUnit.Framework; +using OpenSim.Tests.Common; +using OpenSim.Region.ScriptEngine.Common; + +namespace OpenSim.Region.ScriptEngine.Common.Tests +{ + [TestFixture] + public class LSL_TypesTestLSLInteger + { + private Dictionary m_doubleIntSet; + private Dictionary m_stringIntSet; + + /// + /// Sets up dictionaries and arrays used in the tests. + /// + [TestFixtureSetUp] + public void SetUpDataSets() + { + m_doubleIntSet = new Dictionary(); + m_doubleIntSet.Add(2.0, 2); + m_doubleIntSet.Add(-2.0, -2); + m_doubleIntSet.Add(0.0, 0); + m_doubleIntSet.Add(1.0, 1); + m_doubleIntSet.Add(-1.0, -1); + m_doubleIntSet.Add(999999999.0, 999999999); + m_doubleIntSet.Add(-99999999.0, -99999999); + + m_stringIntSet = new Dictionary(); + 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); + } + + /// + /// Tests LSLFloat is correctly cast explicitly to LSLInteger. + /// + [Test] + public void TestExplicitCastLSLFloatToLSLInteger() + { + LSL_Types.LSLInteger testInteger; + + foreach (KeyValuePair number in m_doubleIntSet) + { + testInteger = (LSL_Types.LSLInteger) new LSL_Types.LSLFloat(number.Key); + Assert.AreEqual(testInteger.value, number.Value); + } + } + + /// + /// Tests string is correctly cast explicitly to LSLInteger. + /// + [Test] + public void TestExplicitCastStringToLSLInteger() + { + LSL_Types.LSLInteger testInteger; + + foreach (KeyValuePair number in m_stringIntSet) + { + testInteger = (LSL_Types.LSLInteger) number.Key; + Assert.AreEqual(testInteger.value, number.Value); + } + } + + /// + /// Tests LSLString is correctly cast explicitly to LSLInteger. + /// + [Test] + public void TestExplicitCastLSLStringToLSLInteger() + { + LSL_Types.LSLInteger testInteger; + + foreach (KeyValuePair number in m_stringIntSet) + { + testInteger = (LSL_Types.LSLInteger) new LSL_Types.LSLString(number.Key); + Assert.AreEqual(testInteger.value, number.Value); + } + } + + /// + /// Tests boolean correctly cast implicitly to LSLInteger. + /// + [Test] + public void TestImplicitCastBooleanToLSLInteger() + { + LSL_Types.LSLInteger testInteger; + + testInteger = (1 == 0); + Assert.AreEqual(0, testInteger.value); + + testInteger = (1 == 1); + Assert.AreEqual(1, testInteger.value); + + testInteger = false; + Assert.AreEqual(0, testInteger.value); + + testInteger = true; + Assert.AreEqual(1, testInteger.value); + } + } +} diff --git a/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLString.cs b/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLString.cs new file mode 100644 index 0000000..3aa52cb --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestLSLString.cs @@ -0,0 +1,136 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using NUnit.Framework; +using OpenSim.Tests.Common; +using OpenSim.Region.ScriptEngine.Common; + +namespace OpenSim.Region.ScriptEngine.Common.Tests +{ + [TestFixture] + public class LSL_TypesTestLSLString + { + private Dictionary m_doubleStringSet; + + /// + /// Sets up dictionaries and arrays used in the tests. + /// + [TestFixtureSetUp] + public void SetUpDataSets() + { + m_doubleStringSet = new Dictionary(); + m_doubleStringSet.Add(2, "2.000000"); + m_doubleStringSet.Add(-2, "-2.000000"); + m_doubleStringSet.Add(0, "0.000000"); + m_doubleStringSet.Add(1, "1.000000"); + m_doubleStringSet.Add(-1, "-1.000000"); + m_doubleStringSet.Add(999999999, "999999999.000000"); + m_doubleStringSet.Add(-99999999, "-99999999.000000"); + m_doubleStringSet.Add(0.5, "0.500000"); + m_doubleStringSet.Add(0.0005, "0.000500"); + m_doubleStringSet.Add(0.6805, "0.680500"); + m_doubleStringSet.Add(-0.5, "-0.500000"); + m_doubleStringSet.Add(-0.0005, "-0.000500"); + m_doubleStringSet.Add(-0.6805, "-0.680500"); + m_doubleStringSet.Add(548.5, "548.500000"); + m_doubleStringSet.Add(2.0005, "2.000500"); + m_doubleStringSet.Add(349485435.6805, "349485435.680500"); + m_doubleStringSet.Add(-548.5, "-548.500000"); + m_doubleStringSet.Add(-2.0005, "-2.000500"); + m_doubleStringSet.Add(-349485435.6805, "-349485435.680500"); + } + + /// + /// Tests constructing a LSLString from an LSLFloat. + /// + [Test] + public void TestConstructFromLSLFloat() + { + LSL_Types.LSLString testString; + + foreach (KeyValuePair number in m_doubleStringSet) + { + testString = new LSL_Types.LSLString(new LSL_Types.LSLFloat(number.Key)); + Assert.AreEqual(number.Value, testString.m_string); + } + } + + /// + /// Tests constructing a LSLString from an LSLFloat. + /// + [Test] + public void TestExplicitCastLSLFloatToLSLString() + { + LSL_Types.LSLString testString; + + foreach (KeyValuePair number in m_doubleStringSet) + { + testString = (LSL_Types.LSLString) new LSL_Types.LSLFloat(number.Key); + Assert.AreEqual(number.Value, testString.m_string); + } + } + + /// + /// Test constructing a Quaternion from a string. + /// + [Test] + public void TestExplicitCastLSLStringToQuaternion() + { + string quaternionString = "<0.00000, 0.70711, 0.00000, 0.70711>"; + LSL_Types.LSLString quaternionLSLString = new LSL_Types.LSLString(quaternionString); + + LSL_Types.Quaternion expectedQuaternion = new LSL_Types.Quaternion(0.0, 0.70711, 0.0, 0.70711); + LSL_Types.Quaternion stringQuaternion = (LSL_Types.Quaternion) quaternionString; + LSL_Types.Quaternion LSLStringQuaternion = (LSL_Types.Quaternion) quaternionLSLString; + + Assert.AreEqual(expectedQuaternion, stringQuaternion); + Assert.AreEqual(expectedQuaternion, LSLStringQuaternion); + } + + /// + /// Tests boolean correctly cast explicitly to LSLString. + /// + [Test] + public void TestImplicitCastBooleanToLSLFloat() + { + LSL_Types.LSLString testString; + + testString = (LSL_Types.LSLString) (1 == 0); + Assert.AreEqual("0", testString.m_string); + + testString = (LSL_Types.LSLString) (1 == 1); + Assert.AreEqual("1", testString.m_string); + + testString = (LSL_Types.LSLString) false; + Assert.AreEqual("0", testString.m_string); + + testString = (LSL_Types.LSLString) true; + Assert.AreEqual("1", testString.m_string); + } + } +} diff --git a/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestList.cs b/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestList.cs new file mode 100644 index 0000000..e63200e --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestList.cs @@ -0,0 +1,101 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using NUnit.Framework; +using OpenSim.Tests.Common; +using OpenSim.Region.ScriptEngine.Common; + +namespace OpenSim.Region.ScriptEngine.Common.Tests +{ + /// + /// Tests the LSL_Types.list class. + /// + [TestFixture] + public class LSL_TypesTestList + { + /// + /// Tests concatenating a string to a list. + /// + [Test] + public void TestConcatenateString() + { + LSL_Types.list testList = new LSL_Types.list(1, 'a', "test"); + testList += "addition"; + + Assert.AreEqual(4, testList.Length); + Assert.AreEqual("addition", testList.Data[3]); + Assert.AreEqual(typeof(System.String), testList.Data[3].GetType()); + + LSL_Types.list secondTestList = testList + "more"; + + Assert.AreEqual(5, secondTestList.Length); + Assert.AreEqual("more", secondTestList.Data[4]); + Assert.AreEqual(typeof(System.String), secondTestList.Data[4].GetType()); + } + + /// + /// Tests concatenating an integer to a list. + /// + [Test] + public void TestConcatenateInteger() + { + LSL_Types.list testList = new LSL_Types.list(1, 'a', "test"); + testList += 20; + + Assert.AreEqual(4, testList.Length); + Assert.AreEqual(20, testList.Data[3]); + Assert.AreEqual(typeof(int), testList.Data[3].GetType()); + + LSL_Types.list secondTestList = testList + 2; + + Assert.AreEqual(5, secondTestList.Length); + Assert.AreEqual(2, secondTestList.Data[4]); + Assert.AreEqual(typeof(int), secondTestList.Data[4].GetType()); + } + + /// + /// Tests concatenating a double to a list. + /// + [Test] + public void TestConcatenateDouble() + { + LSL_Types.list testList = new LSL_Types.list(1, 'a', "test"); + testList += 2.0; + + Assert.AreEqual(4, testList.Length); + Assert.AreEqual(2.0, testList.Data[3]); + Assert.AreEqual(typeof(double), testList.Data[3].GetType()); + + LSL_Types.list secondTestList = testList + 0.04; + + Assert.AreEqual(5, secondTestList.Length); + Assert.AreEqual(0.04, secondTestList.Data[4]); + Assert.AreEqual(typeof(double), secondTestList.Data[4].GetType()); + } + } +} diff --git a/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestVector3.cs b/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestVector3.cs new file mode 100644 index 0000000..0a41f92 --- /dev/null +++ b/OpenSim/Region/ScriptEngine/Common/Tests/LSL_TypesTestVector3.cs @@ -0,0 +1,69 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System.Collections.Generic; +using NUnit.Framework; +using OpenSim.Tests.Common; +using OpenSim.Region.ScriptEngine.Common; +using vector = OpenSim.Region.ScriptEngine.Common.LSL_Types.Vector3; + +namespace OpenSim.Region.ScriptEngine.Common.Tests +{ + [TestFixture] + public class LSL_TypesTestVector3 + { + /// + /// Tests for Vector3 + /// + [Test] + public void TestDotProduct() + { + // The numbers we test for. + Dictionary expectsSet = new Dictionary(); + expectsSet.Add("<1, 2, 3> * <2, 3, 4>", 20.0); + expectsSet.Add("<1, 2, 3> * <0, 0, 0>", 0.0); + + double result; + string[] parts; + string[] delim = { "*" }; + + foreach (KeyValuePair ex in expectsSet) + { + parts = ex.Key.Split(delim, System.StringSplitOptions.None); + result = new vector(parts[0]) * new vector(parts[1]); + Assert.AreEqual(ex.Value, result); + } + } + + [Test] + public void TestUnaryMinusOperator() + { + Assert.AreEqual(new vector(-1, -1, -1), - (new vector(1, 1, 1))); + Assert.AreEqual(new vector(0, 0, 0), - (new vector(0, 0, 0))); + } + } +} -- cgit v1.1