aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Tests
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Tests')
-rw-r--r--OpenSim/Tests/Common/ANumericalToleranceConstraint.cs30
-rw-r--r--OpenSim/Tests/Common/DoubleToleranceConstraint.cs52
-rw-r--r--OpenSim/Tests/Common/TestHelper.cs25
-rw-r--r--OpenSim/Tests/Common/VectorToleranceConstraint.cs58
-rw-r--r--OpenSim/Tests/OpenSim/Framework/UtilTest.cs115
5 files changed, 280 insertions, 0 deletions
diff --git a/OpenSim/Tests/Common/ANumericalToleranceConstraint.cs b/OpenSim/Tests/Common/ANumericalToleranceConstraint.cs
new file mode 100644
index 0000000..289e4bb
--- /dev/null
+++ b/OpenSim/Tests/Common/ANumericalToleranceConstraint.cs
@@ -0,0 +1,30 @@
1using System;
2using NUnit.Framework.Constraints;
3
4namespace OpenSim.Tests.Common
5{
6 public abstract class ANumericalToleranceConstraint : Constraint
7 {
8 protected double _tolerance;
9
10 public ANumericalToleranceConstraint(double tolerance)
11 {
12 if (tolerance < 0)
13 {
14 throw new ArgumentException("Tolerance cannot be negative.");
15 }
16 _tolerance = tolerance;
17 }
18
19
20 protected bool IsWithinDoubleConstraint(double doubleValue, double baseValue)
21 {
22 if (doubleValue >= baseValue - _tolerance && doubleValue <= baseValue + _tolerance)
23 {
24 return true;
25 }
26
27 return false;
28 }
29 }
30}
diff --git a/OpenSim/Tests/Common/DoubleToleranceConstraint.cs b/OpenSim/Tests/Common/DoubleToleranceConstraint.cs
new file mode 100644
index 0000000..f3da236
--- /dev/null
+++ b/OpenSim/Tests/Common/DoubleToleranceConstraint.cs
@@ -0,0 +1,52 @@
1using System;
2using NUnit.Framework;
3using NUnit.Framework.Constraints;
4using OpenSim.Tests.Common;
5
6namespace OpenSim.Tests.Common
7{
8 public class DoubleToleranceConstraint : ANumericalToleranceConstraint
9 {
10
11 private double _baseValue;
12 private double _valueToBeTested;
13
14 public DoubleToleranceConstraint(double baseValue, double tolerance) : base(tolerance)
15 {
16 _baseValue = baseValue;
17 }
18
19 ///<summary>
20 ///Test whether the constraint is satisfied by a given value
21 ///</summary>
22 ///<param name="valueToBeTested">The value to be tested</param>
23 ///<returns>
24 ///True for success, false for failure
25 ///</returns>
26 public override bool Matches(object valueToBeTested)
27 {
28 if (valueToBeTested == null)
29 {
30 throw new ArgumentException("Constraint cannot be used upon null values.");
31 }
32 if( valueToBeTested.GetType() != typeof(double))
33 {
34 throw new ArgumentException("Constraint cannot be used upon non double-values.");
35 }
36
37 _valueToBeTested = (double)valueToBeTested;
38
39 return IsWithinDoubleConstraint(_valueToBeTested, _baseValue );
40 }
41
42 public override void WriteDescriptionTo(MessageWriter writer)
43 {
44 writer.WriteExpectedValue(string.Format("A value {0} within tolerance of plus or minus {1}",_baseValue,_tolerance));
45 }
46
47 public override void WriteActualValueTo(MessageWriter writer)
48 {
49 writer.WriteActualValue(_valueToBeTested);
50 }
51 }
52}
diff --git a/OpenSim/Tests/Common/TestHelper.cs b/OpenSim/Tests/Common/TestHelper.cs
new file mode 100644
index 0000000..f59c157
--- /dev/null
+++ b/OpenSim/Tests/Common/TestHelper.cs
@@ -0,0 +1,25 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace OpenSim.Tests.Common
6{
7 public delegate void TestDelegate();
8
9 public class TestHelper
10 {
11 public static bool AssertThisDelegateCausesArgumentException(TestDelegate d)
12 {
13 try
14 {
15 d();
16 }
17 catch(ArgumentException e)
18 {
19 return true;
20 }
21
22 return false;
23 }
24 }
25}
diff --git a/OpenSim/Tests/Common/VectorToleranceConstraint.cs b/OpenSim/Tests/Common/VectorToleranceConstraint.cs
new file mode 100644
index 0000000..1faf7dd
--- /dev/null
+++ b/OpenSim/Tests/Common/VectorToleranceConstraint.cs
@@ -0,0 +1,58 @@
1using System;
2using libsecondlife;
3using NUnit.Framework;
4
5namespace OpenSim.Tests.Common
6{
7 public class VectorToleranceConstraint : ANumericalToleranceConstraint
8 {
9 private LLVector3 _baseValue;
10 private LLVector3 _valueToBeTested;
11
12 public VectorToleranceConstraint(LLVector3 baseValue, double tolerance) : base(tolerance)
13 {
14 _baseValue = baseValue;
15 }
16
17 ///<summary>
18 ///Test whether the constraint is satisfied by a given value
19 ///</summary>
20 ///<param name="valueToBeTested">The value to be tested</param>
21 ///<returns>
22 ///True for success, false for failure
23 ///</returns>
24 public override bool Matches(object valueToBeTested)
25 {
26 if (valueToBeTested == null)
27 {
28 throw new ArgumentException("Constraint cannot be used upon null values.");
29 }
30 if (valueToBeTested.GetType() != typeof (LLVector3))
31 {
32 throw new ArgumentException("Constraint cannot be used upon non vector values.");
33 }
34
35 _valueToBeTested = (LLVector3) valueToBeTested;
36
37 if ( IsWithinDoubleConstraint(_valueToBeTested.X,_baseValue.X) &&
38 IsWithinDoubleConstraint(_valueToBeTested.Y,_baseValue.Y) &&
39 IsWithinDoubleConstraint(_valueToBeTested.Z,_baseValue.Z) )
40 {
41 return true;
42 }
43
44 return false;
45 }
46
47 public override void WriteDescriptionTo(MessageWriter writer)
48 {
49 writer.WriteExpectedValue(
50 string.Format("A value {0} within tolerance of plus or minus {1}", _baseValue, _tolerance));
51 }
52
53 public override void WriteActualValueTo(MessageWriter writer)
54 {
55 writer.WriteActualValue(_valueToBeTested);
56 }
57 }
58}
diff --git a/OpenSim/Tests/OpenSim/Framework/UtilTest.cs b/OpenSim/Tests/OpenSim/Framework/UtilTest.cs
new file mode 100644
index 0000000..ef42eee
--- /dev/null
+++ b/OpenSim/Tests/OpenSim/Framework/UtilTest.cs
@@ -0,0 +1,115 @@
1using libsecondlife;
2using NUnit.Framework;
3using NUnit.Framework.SyntaxHelpers;
4
5using OpenSim.Tests.Common;
6
7namespace OpenSim.Framework.Tests
8{
9 [TestFixture]
10 public class UtilTests
11 {
12 [Test]
13 public void VectorOperationTests()
14 {
15 LLVector3 v1, v2;
16 double expectedDistance;
17 double expectedMagnitude;
18 double lowPrecisionTolerance = 0.001;
19
20 //Lets test a simple case of <0,0,0> and <5,5,5>
21 {
22 v1 = new LLVector3(0, 0, 0);
23 v2 = new LLVector3(5, 5, 5);
24 expectedDistance = 8.66;
25 Assert.That(Util.GetDistanceTo(v1, v2),
26 new DoubleToleranceConstraint(expectedDistance, lowPrecisionTolerance),
27 "Calculated distance between two vectors was not within tolerances.");
28
29 expectedMagnitude = 0;
30 Assert.That(Util.GetMagnitude(v1), Is.EqualTo(0), "Magnitude of null vector was not zero.");
31
32 expectedMagnitude = 8.66;
33 Assert.That(Util.GetMagnitude(v2),
34 new DoubleToleranceConstraint(expectedMagnitude, lowPrecisionTolerance),
35 "Magnitude of vector was incorrect.");
36
37 TestDelegate d = delegate() { Util.GetNormalizedVector(v1); };
38 bool causesArgumentException = TestHelper.AssertThisDelegateCausesArgumentException(d);
39 Assert.That(causesArgumentException, Is.True,
40 "Getting magnitude of null vector did not cause argument exception.");
41
42 LLVector3 expectedNormalizedVector = new LLVector3(.577f, .577f, .577f);
43 double expectedNormalizedMagnitude = 1;
44 LLVector3 normalizedVector = Util.GetNormalizedVector(v2);
45 Assert.That(normalizedVector,
46 new VectorToleranceConstraint(expectedNormalizedVector, lowPrecisionTolerance),
47 "Normalized vector generated from vector was not what was expected.");
48 Assert.That(Util.GetMagnitude(normalizedVector),
49 new DoubleToleranceConstraint(expectedNormalizedMagnitude, lowPrecisionTolerance),
50 "Normalized vector generated from vector does not have magnitude of 1.");
51 }
52
53 //Lets test a simple case of <0,0,0> and <0,0,0>
54 {
55 v1 = new LLVector3(0, 0, 0);
56 v2 = new LLVector3(0, 0, 0);
57 expectedDistance = 0;
58 Assert.That(Util.GetDistanceTo(v1, v2),
59 new DoubleToleranceConstraint(expectedDistance, lowPrecisionTolerance),
60 "Calculated distance between two vectors was not within tolerances.");
61
62 expectedMagnitude = 0;
63 Assert.That(Util.GetMagnitude(v1), Is.EqualTo(0), "Magnitude of null vector was not zero.");
64
65 expectedMagnitude = 0;
66 Assert.That(Util.GetMagnitude(v2),
67 new DoubleToleranceConstraint(expectedMagnitude, lowPrecisionTolerance),
68 "Magnitude of vector was incorrect.");
69
70 TestDelegate d = delegate() { Util.GetNormalizedVector(v1); };
71 bool causesArgumentException = TestHelper.AssertThisDelegateCausesArgumentException(d);
72 Assert.That(causesArgumentException, Is.True,
73 "Getting magnitude of null vector did not cause argument exception.");
74
75 d = delegate() { Util.GetNormalizedVector(v2); };
76 causesArgumentException = TestHelper.AssertThisDelegateCausesArgumentException(d);
77 Assert.That(causesArgumentException, Is.True,
78 "Getting magnitude of null vector did not cause argument exception.");
79 }
80
81 //Lets test a simple case of <0,0,0> and <-5,-5,-5>
82 {
83 v1 = new LLVector3(0, 0, 0);
84 v2 = new LLVector3(-5, -5, -5);
85 expectedDistance = 8.66;
86 Assert.That(Util.GetDistanceTo(v1, v2),
87 new DoubleToleranceConstraint(expectedDistance, lowPrecisionTolerance),
88 "Calculated distance between two vectors was not within tolerances.");
89
90 expectedMagnitude = 0;
91 Assert.That(Util.GetMagnitude(v1), Is.EqualTo(0), "Magnitude of null vector was not zero.");
92
93 expectedMagnitude = 8.66;
94 Assert.That(Util.GetMagnitude(v2),
95 new DoubleToleranceConstraint(expectedMagnitude, lowPrecisionTolerance),
96 "Magnitude of vector was incorrect.");
97
98 TestDelegate d = delegate() { Util.GetNormalizedVector(v1); };
99 bool causesArgumentException = TestHelper.AssertThisDelegateCausesArgumentException(d);
100 Assert.That(causesArgumentException, Is.True,
101 "Getting magnitude of null vector did not cause argument exception.");
102
103 LLVector3 expectedNormalizedVector = new LLVector3(-.577f, -.577f, -.577f);
104 double expectedNormalizedMagnitude = 1;
105 LLVector3 normalizedVector = Util.GetNormalizedVector(v2);
106 Assert.That(normalizedVector,
107 new VectorToleranceConstraint(expectedNormalizedVector, lowPrecisionTolerance),
108 "Normalized vector generated from vector was not what was expected.");
109 Assert.That(Util.GetMagnitude(normalizedVector),
110 new DoubleToleranceConstraint(expectedNormalizedMagnitude, lowPrecisionTolerance),
111 "Normalized vector generated from vector does not have magnitude of 1.");
112 }
113 }
114 }
115}