Adding the beginnings of Tao.Ode unit tests. First in is a set of tests for Matrix3 marshalling, a recent trouble area.

svn path=/branches/tao_2_0/; revision=62968
This commit is contained in:
Terry L. Triplett 2006-07-25 16:20:32 +00:00
Родитель f727b7855d
Коммит c897bc77e6
1 изменённых файлов: 128 добавлений и 0 удалений

Просмотреть файл

@ -0,0 +1,128 @@
using NUnit.Framework;
using System;
using Tao.Ode;
namespace Tao_Ode_Tests
{
/// <summary>
/// This fixture tests marshalling of Tao.Ode functions using dMatrix3 as a parameter.
/// dMatrix3 does not marshall correctly itself for some reason, so until this is corrected,
/// dMatrix3 is passed to ODE as an array and overloaded functions are provided to retain
/// compatibility with the ODE API.
///
/// Strangely enough, dMatrix3 marshalling in the reverse direction (ie. from ODE) seems to work.
/// </summary>
[TestFixture]
public class Matrix3Marshalling
{
[SetUp]
public void SetUp()
{
// Nothing to setup right now
}
[Test]
public void dGeomSetRotationTest()
{
IntPtr simplespace = Ode.dSimpleSpaceCreate(IntPtr.Zero);
IntPtr box = Ode.dCreateBox(
simplespace, 25.0f, 5.0f, 25.0f
);
Ode.dMatrix3 r = new Ode.dMatrix3(
new float[] {
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f
}
);
try {
Ode.dGeomSetRotation(box, r);
}
catch (Exception e) {
Assert.Fail("dGeomSetRotation failed with exception: " + e.GetType());
}
}
[Test]
public void dMassRotateTest()
{
Ode.dMass newMass = new Ode.dMass();
newMass.c = new Ode.dVector4(); // Just to be safe the dMass
newMass.I = new Ode.dMatrix3(); // structure is initialized
Ode.dMassSetSphere(ref newMass, 0.2f, 3.5f);
Ode.dMatrix3 r = new Ode.dMatrix3(
new float[] {
1.0f, 0.0f, 0.0f , 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f
}
);
try {
Ode.dMassRotate(ref newMass, r);
}
catch (Exception e) {
Assert.Fail("dMassRotate failed with exception: " + e.GetType());
}
}
[Test]
public void dBodySetRotationTest()
{
IntPtr newWorldId = Ode.dWorldCreate();
IntPtr newBodyId = Ode.dBodyCreate(newWorldId);
Ode.dMatrix3 r = new Ode.dMatrix3(
new float[] {
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f
}
);
try {
Ode.dBodySetRotation(newBodyId, r);
}
catch (Exception e) {
Assert.Fail("dBodySetRotation failed with exception: " + e.GetType());
}
}
/// <summary>
/// Test to verify that dMatrix3 is correctly marshalled when *returning* data
/// from an ODE call.
/// </summary>
[Test]
public void dBodyGetRotationTest()
{
IntPtr newWorldId = Ode.dWorldCreate();
IntPtr newBodyId = Ode.dBodyCreate(newWorldId);
Ode.dMatrix3 r = new Ode.dMatrix3(
new float[] {
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f
}
);
Ode.dMatrix3 r2
= new Ode.dMatrix3(
new float[] {
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f
}
);
Ode.dBodySetRotation(newBodyId, r);
r2 = Ode.dBodyGetRotation(newBodyId);
Assert.AreEqual(r,r2,"Assigned and returned rotation matrix values are not equal");
}
}
}