diff --git a/ANX.Framework.TestCenter/ANX.Framework.TestCenter.csproj b/ANX.Framework.TestCenter/ANX.Framework.TestCenter.csproj index 789945f6..ed683fd3 100644 --- a/ANX.Framework.TestCenter/ANX.Framework.TestCenter.csproj +++ b/ANX.Framework.TestCenter/ANX.Framework.TestCenter.csproj @@ -60,6 +60,8 @@ + + diff --git a/ANX.Framework.TestCenter/AssertHelper.cs b/ANX.Framework.TestCenter/AssertHelper.cs index 6696b5b0..4e72e513 100644 --- a/ANX.Framework.TestCenter/AssertHelper.cs +++ b/ANX.Framework.TestCenter/AssertHelper.cs @@ -171,6 +171,8 @@ namespace ANX.Framework.TestCenter { private const float epsilon = 0.0000001f; private const int complementBits = 5; + + #region Compare public static bool CompareFloats(float a, float b, float epsilon) { @@ -204,13 +206,13 @@ namespace ANX.Framework.TestCenter return AlmostEqual2sComplement(a, b, complementBits); } - private static unsafe int FloatToInt32Bits(float f) - { - return *((int*)&f); - } - - private static bool AlmostEqual2sComplement(float a, float b, int maxDeltaBits) - { + private static unsafe int FloatToInt32Bits(float f) + { + return *((int*)&f); + } + + private static bool AlmostEqual2sComplement(float a, float b, int maxDeltaBits) + { int aInt = FloatToInt32Bits(a); if (aInt < 0) { @@ -223,11 +225,58 @@ namespace ANX.Framework.TestCenter bInt = Int32.MinValue - bInt; } - int intDiff = Math.Abs(aInt - bInt); - - return intDiff <= (1 << maxDeltaBits); + int intDiff = Math.Abs(aInt - bInt); + + return intDiff <= (1 << maxDeltaBits); } + private static bool Compare(XNACurve xna, ANXCurve anx) + { + return (xna.IsConstant == anx.IsConstant) && (Compare(xna.Keys, anx.Keys)) && (Compare(xna.PreLoop, anx.PreLoop)) && (Compare(xna.PostLoop, anx.PostLoop)); + } + + private static bool Compare(XNACurveLoopType xna, ANXCurveLoopType anx) + { + return ((int)xna == (int)anx); + } + + private static bool Compare(XNACurveKeyCollection xna, ANXCurveKeyCollection anx) + { + if (xna.Count != anx.Count) + { + return false; + } + else + { + for (int i = 0; i < xna.Count; i++) + { + if (!Compare(xna[i], anx[i])) + { + return false; + } + } + } + return true; + } + + private static bool Compare(XNACurveKey xna, ANXCurveKey anx) + { + return xna.Position == anx.Position && xna.Value == anx.Value && xna.TangentIn == anx.TangentIn && xna.TangentOut == anx.TangentOut && Compare(xna.Continuity, anx.Continuity); + } + + private static bool Compare(XNACurveContinuity xna, ANXCurveContinuity anx) + { + return ((int)xna == (int)anx); + } + + private static bool Compare(XNAStorageDevice xna, ANXStorageDevice anx) + { + return (xna.FreeSpace == anx.FreeSpace) && (xna.IsConnected == anx.IsConnected) && (xna.TotalSpace == anx.TotalSpace); + } + + #endregion + + #region ConvertEquals public static void ConvertEquals(float xna, float anx, String test) { if (AssertHelper.CompareFloats(xna, anx, epsilon) || @@ -244,7 +293,7 @@ namespace ANX.Framework.TestCenter public static void ConvertEquals(Exception xna, Exception anx, String test) { - if (xna.GetType()==anx.GetType()) + if (xna.GetType() == anx.GetType()) { Assert.Pass(test + " passed"); } @@ -253,7 +302,7 @@ namespace ANX.Framework.TestCenter Assert.Fail(String.Format("{0} failed: xna: ({1}) anx: ({2})", test, xna.ToString(), anx.ToString())); } } - + public static void ConvertEquals(String xna, String anx, String test) { if (xna == anx) @@ -265,6 +314,7 @@ namespace ANX.Framework.TestCenter Assert.Fail(String.Format("{0} failed: xna: ({1}) anx: ({2})", test, xna, anx)); } } + public static void ConvertEquals(bool xna, bool anx, String test) { if (xna == anx) @@ -759,14 +809,9 @@ namespace ANX.Framework.TestCenter } } - private static bool Compare(XNAStorageDevice xna, ANXStorageDevice anx) - { - return (xna.FreeSpace == anx.FreeSpace) && (xna.IsConnected == anx.IsConnected) && (xna.TotalSpace == anx.TotalSpace); - } - public static void ConvertEquals(XNAStorageContainer xna, ANXStorageContainer anx, String test) { - if ((Compare(xna.StorageDevice, anx.StorageDevice))&&(xna.IsDisposed==anx.IsDisposed)&&(xna.DisplayName==anx.DisplayName)) + if ((Compare(xna.StorageDevice, anx.StorageDevice)) && (xna.IsDisposed == anx.IsDisposed) && (xna.DisplayName == anx.DisplayName)) { Assert.Pass(test + " passed"); } @@ -776,7 +821,7 @@ namespace ANX.Framework.TestCenter } } - internal static void ConvertEquals(XNACurve xna, ANXCurve anx, String test) + public static void ConvertEquals(XNACurve xna, ANXCurve anx, String test) { if (Compare(xna, anx)) { @@ -802,7 +847,7 @@ namespace ANX.Framework.TestCenter public static void ConvertEquals(XNAGamePadState xna, ANXGamePadState anx, String test) { - if ((xna.Buttons.ToString()==anx.Buttons.ToString())&&(xna.DPad.ToString()==anx.DPad.ToString())&&(xna.IsConnected==anx.IsConnected)&&(xna.ThumbSticks.ToString()==anx.ThumbSticks.ToString())&&(xna.Triggers.ToString()==anx.Triggers.ToString())) + if ((xna.Buttons.ToString() == anx.Buttons.ToString()) && (xna.DPad.ToString() == anx.DPad.ToString()) && (xna.IsConnected == anx.IsConnected) && (xna.ThumbSticks.ToString() == anx.ThumbSticks.ToString()) && (xna.Triggers.ToString() == anx.Triggers.ToString())) { Assert.Pass(test + " passed"); } @@ -812,46 +857,41 @@ namespace ANX.Framework.TestCenter } } - - private static bool Compare(XNACurve xna, ANXCurve anx) + public static void ConvertEquals(XNACurveKey xna, ANXCurveKey anx, String test) { - return (xna.IsConstant == anx.IsConstant) && (Compare(xna.Keys, anx.Keys)) && (Compare(xna.PreLoop, anx.PreLoop)) && (Compare(xna.PostLoop, anx.PostLoop)); - } - - private static bool Compare(XNACurveLoopType xna, ANXCurveLoopType anx) - { - return ((int)xna == (int)anx); - } - - private static bool Compare(XNACurveKeyCollection xna, ANXCurveKeyCollection anx) - { - if (xna.Count!=anx.Count) + if (Compare(xna, anx)) { - return false; + Assert.Pass(test + " passed"); } else { - for (int i = 0; i < xna.Count; i++) - { - if (!Compare(xna[i],anx[i])) - { - return false; - } - } + Assert.Fail(String.Format("{0} failed: xna({1}) anx({2})", test, xna.ToString(), anx.ToString())); } - return true; } - - private static bool Compare(XNACurveKey xna, ANXCurveKey anx) + + internal static void ConvertEquals(XNACurveKey xna, ANXCurveKey anx, XNACurveKey xna2, ANXCurveKey anx2, String test) { - return xna.Position == anx.Position && xna.Value == anx.Value && xna.TangentIn == anx.TangentIn && xna.TangentOut == anx.TangentOut && Compare(xna.Continuity,anx.Continuity); + if (Compare(xna, anx)&&Compare(xna,anx2)&&Compare(xna2,anx2)) + { + Assert.Pass(test + " passed"); + } + else + { + Assert.Fail(String.Format("{0} failed: xna({1}) anx({2})", test, xna.ToString(), anx.ToString())); + } } - - private static bool Compare(XNACurveContinuity xna, ANXCurveContinuity anx) + + public static void ConvertEquals(XNACurveKeyCollection xna, ANXCurveKeyCollection anx, String test) { - return ((int)xna == (int)anx); + if (Compare(xna,anx)) + { + } + else + { + Assert.Fail(String.Format("{0} failed: xna({1}) anx({2})", test, xna.ToString(), anx.ToString())); + } } - + #endregion } } diff --git a/ANX.Framework.TestCenter/Strukturen/CurveKeyCollectionTest.cs b/ANX.Framework.TestCenter/Strukturen/CurveKeyCollectionTest.cs new file mode 100644 index 00000000..7e516a81 --- /dev/null +++ b/ANX.Framework.TestCenter/Strukturen/CurveKeyCollectionTest.cs @@ -0,0 +1,183 @@ +#region Using Statements +using System; +using System.IO; +using ANX.Framework.NonXNA; +using NUnit.Framework; +#endregion // Using Statements + +using XNACurve = Microsoft.Xna.Framework.Curve; +using ANXCurve = ANX.Framework.Curve; + +using XNACurveKey = Microsoft.Xna.Framework.CurveKey; +using ANXCurveKey = ANX.Framework.CurveKey; + +using XNACurveLoopType = Microsoft.Xna.Framework.CurveLoopType; +using ANXCurveLoopType = ANX.Framework.CurveLoopType; + +using XNACurveKeyCollection = Microsoft.Xna.Framework.CurveKeyCollection; +using ANXCurveKeyCollection = ANX.Framework.CurveKeyCollection; + +using XNACurveTangent = Microsoft.Xna.Framework.CurveTangent; +using ANXCurveTangent = ANX.Framework.CurveTangent; + + + +#region License + +// +// This file is part of the ANX.Framework created by the "ANX.Framework developer group". +// +// This file is released under the Ms-PL license. +// +// +// +// Microsoft Public License (Ms-PL) +// +// This license governs use of the accompanying software. If you use the software, you accept this license. +// If you do not accept the license, do not use the software. +// +// 1.Definitions +// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning +// here as under U.S. copyright law. +// A "contribution" is the original software, or any additions or changes to the software. +// A "contributor" is any person that distributes its contribution under this license. +// "Licensed patents" are a contributor's patent claims that read directly on its contribution. +// +// 2.Grant of Rights +// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations +// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to +// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution +// or any derivative works that you create. +// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in +// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed +// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution +// in the software or derivative works of the contribution in the software. +// +// 3.Conditions and Limitations +// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your +// patent license from such contributor to the software ends automatically. +// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution +// notices that are present in the software. +// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including +// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or +// object code form, you may only do so under a license that complies with this license. +// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, +// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the +// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a +// particular purpose and non-infringement. + +#endregion // License + +namespace ANX.Framework.TestCenter.Strukturen +{ + [TestFixture] + public class CurveKeyCollectionTest + { + #region Testdata + static object[] sixteenfloats = + { + new object[] { DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] { DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] { DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] { DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] { DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] {1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,}, + }; + static object[] sixteenfloats2 = + { + new object[] {1f, 1f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,}, + new object[] {2f, 1f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,}, + new object[] {1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,}, + }; + + #endregion + + [TestCaseSource("sixteenfloats")] + public void add(float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKeyCollection xna = new XNACurveKeyCollection(); + xna.Add(new XNACurveKey(a1, a2)); + xna.Add(new XNACurveKey(a3, a4)); + xna.Add(new XNACurveKey(a5, a6)); + xna.Add(new XNACurveKey(a7, a8)); + xna.Add(new XNACurveKey(a9, a10)); + xna.Add(new XNACurveKey(a11, a12)); + xna.Add(new XNACurveKey(a13, a14)); + xna.Add(new XNACurveKey(a15, a16)); + + ANXCurveKeyCollection anx = new ANXCurveKeyCollection(); + anx.Add(new ANXCurveKey(a1, a2)); + anx.Add(new ANXCurveKey(a3, a4)); + anx.Add(new ANXCurveKey(a5, a6)); + anx.Add(new ANXCurveKey(a7, a8)); + anx.Add(new ANXCurveKey(a9, a10)); + anx.Add(new ANXCurveKey(a11, a12)); + anx.Add(new ANXCurveKey(a13, a14)); + anx.Add(new ANXCurveKey(a15, a16)); + + + AssertHelper.ConvertEquals(xna, anx, "add"); + } + [TestCaseSource("sixteenfloats")] + public void add2(float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKeyCollection xna = new XNACurveKeyCollection(); + xna.Add(new XNACurveKey(a1, a2)); + xna.Add(new XNACurveKey(a3, a4)); + xna.Add(new XNACurveKey(a5, a6)); + xna.Add(new XNACurveKey(a7, a8)); + xna.Add(new XNACurveKey(a9, a10)); + xna.Add(new XNACurveKey(a11, a12)); + xna.Add(new XNACurveKey(a13, a14)); + xna.Add(new XNACurveKey(a15, a16)); + XNACurveKeyCollection xna2 = new XNACurveKeyCollection(); + xna2.Add(new XNACurveKey(a5, a6)); + xna2.Add(new XNACurveKey(a7, a8)); + xna2.Add(new XNACurveKey(a9, a10)); + xna2.Add(new XNACurveKey(a11, a12)); + xna2.Add(new XNACurveKey(a13, a14)); + xna2.Add(new XNACurveKey(a15, a16)); + xna2.Add(new XNACurveKey(a1, a2)); + xna2.Add(new XNACurveKey(a3, a4)); + + ANXCurveKeyCollection anx = new ANXCurveKeyCollection(); + anx.Add(new ANXCurveKey(a1, a2)); + anx.Add(new ANXCurveKey(a3, a4)); + anx.Add(new ANXCurveKey(a5, a6)); + anx.Add(new ANXCurveKey(a7, a8)); + anx.Add(new ANXCurveKey(a9, a10)); + anx.Add(new ANXCurveKey(a11, a12)); + anx.Add(new ANXCurveKey(a13, a14)); + anx.Add(new ANXCurveKey(a15, a16)); + ANXCurveKeyCollection anx2 = new ANXCurveKeyCollection(); + anx2.Add(new ANXCurveKey(a5, a6)); + anx2.Add(new ANXCurveKey(a7, a8)); + anx2.Add(new ANXCurveKey(a9, a10)); + anx2.Add(new ANXCurveKey(a11, a12)); + anx2.Add(new ANXCurveKey(a13, a14)); + anx2.Add(new ANXCurveKey(a15, a16)); + anx2.Add(new ANXCurveKey(a1, a2)); + anx2.Add(new ANXCurveKey(a3, a4)); + + for (int i = 0; i < xna.Count; i++) + { + if (!(xna[i]==xna2[i])) + { + Assert.Fail(); + } + } + + AssertHelper.ConvertEquals(xna, anx, "add2"); + } + public void Constructor() + { + + XNACurveKeyCollection xna = new XNACurveKeyCollection(); + ANXCurveKeyCollection anx = new ANXCurveKeyCollection(); + + AssertHelper.ConvertEquals(xna, anx, "Constructor"); + } + + } +} diff --git a/ANX.Framework.TestCenter/Strukturen/CurveKeyTest.cs b/ANX.Framework.TestCenter/Strukturen/CurveKeyTest.cs new file mode 100644 index 00000000..8ed257dc --- /dev/null +++ b/ANX.Framework.TestCenter/Strukturen/CurveKeyTest.cs @@ -0,0 +1,217 @@ +#region Using Statements +using System; +using System.IO; +using ANX.Framework.NonXNA; +using NUnit.Framework; +#endregion // Using Statements + +using XNACurve = Microsoft.Xna.Framework.Curve; +using ANXCurve = ANX.Framework.Curve; + +using XNACurveKey = Microsoft.Xna.Framework.CurveKey; +using ANXCurveKey = ANX.Framework.CurveKey; + +using XNACurveLoopType = Microsoft.Xna.Framework.CurveLoopType; +using ANXCurveLoopType = ANX.Framework.CurveLoopType; + +using XNACurveKeyCollection = Microsoft.Xna.Framework.CurveKeyCollection; +using ANXCurveKeyCollection = ANX.Framework.CurveKeyCollection; + +using XNACurveTangent = Microsoft.Xna.Framework.CurveTangent; +using ANXCurveTangent = ANX.Framework.CurveTangent; + +using XNACurveContinuity = Microsoft.Xna.Framework.CurveContinuity; +using ANXCurveContinuity = ANX.Framework.CurveContinuity; + + +#region License + +// +// This file is part of the ANX.Framework created by the "ANX.Framework developer group". +// +// This file is released under the Ms-PL license. +// +// +// +// Microsoft Public License (Ms-PL) +// +// This license governs use of the accompanying software. If you use the software, you accept this license. +// If you do not accept the license, do not use the software. +// +// 1.Definitions +// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning +// here as under U.S. copyright law. +// A "contribution" is the original software, or any additions or changes to the software. +// A "contributor" is any person that distributes its contribution under this license. +// "Licensed patents" are a contributor's patent claims that read directly on its contribution. +// +// 2.Grant of Rights +// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations +// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to +// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution +// or any derivative works that you create. +// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in +// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed +// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution +// in the software or derivative works of the contribution in the software. +// +// 3.Conditions and Limitations +// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your +// patent license from such contributor to the software ends automatically. +// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution +// notices that are present in the software. +// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including +// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or +// object code form, you may only do so under a license that complies with this license. +// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, +// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the +// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a +// particular purpose and non-infringement. + +#endregion // License +namespace ANX.Framework.TestCenter.Strukturen +{ + [TestFixture] + public class CurveKeyTest + { + + + #region Testdata + static object[] sixteenfloats = + { + new object[] { DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] { DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] { DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] { DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] { DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] {1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,}, + }; + static object[] sixteenfloats2 = + { + new object[] {1f, 1f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,}, + new object[] {2f, 1f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,}, + new object[] {1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,}, + }; + static object[] sixteenfloatsCurve = + { + new object[] {XNACurveContinuity.Smooth,ANXCurveContinuity.Smooth, DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] { XNACurveContinuity.Smooth,ANXCurveContinuity.Smooth, DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] {XNACurveContinuity.Smooth,ANXCurveContinuity.Smooth, DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] { XNACurveContinuity.Step,ANXCurveContinuity.Step, DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] {XNACurveContinuity.Step,ANXCurveContinuity.Step, DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000), DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, + new object[] {XNACurveContinuity.Smooth,ANXCurveContinuity.Smooth, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,}, + new object[] {XNACurveContinuity.Step,ANXCurveContinuity.Step, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,}, + }; + + #endregion + + [TestCaseSource("sixteenfloats")] + public void Constructor(float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKey xna = new XNACurveKey(a1, a2); + ANXCurveKey anx = new ANXCurveKey(a1, a2); + + AssertHelper.ConvertEquals(xna, anx, "Constructor"); + } + + [TestCaseSource("sixteenfloats")] + public void Constructor2(float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKey xna = new XNACurveKey(a1, a2, a3, a4); + ANXCurveKey anx = new ANXCurveKey(a1, a2, a3, a4); + + AssertHelper.ConvertEquals(xna, anx, "Constructor2"); + } + + [TestCaseSource("sixteenfloatsCurve")] + public void Constructor3(XNACurveContinuity xnacurve, ANXCurveContinuity anxcurve, float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKey xna = new XNACurveKey(a1, a2, a3, a4, xnacurve); + ANXCurveKey anx = new ANXCurveKey(a1, a2, a3, a4, anxcurve); + + AssertHelper.ConvertEquals(xna, anx, "Constructor3"); + } + + [TestCaseSource("sixteenfloats")] + public void Clone(float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKey xna = new XNACurveKey(a1, a2, a3, a4); + XNACurveKey xna2 = xna.Clone(); + ANXCurveKey anx = new ANXCurveKey(a1, a2, a3, a4); + ANXCurveKey anx2 = anx.Clone(); + + + AssertHelper.ConvertEquals(xna, anx, xna2, anx2, "Clone"); + } + + [TestCaseSource("sixteenfloats2")] + public void CompareTo(float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKey xna = new XNACurveKey(a1, a2, a3, a4); + XNACurveKey xna2 = new XNACurveKey(a2, a1, a3, a4); + ANXCurveKey anx = new ANXCurveKey(a1, a2, a3, a4); + ANXCurveKey anx2 = new ANXCurveKey(a2, a1, a3, a4); + + + AssertHelper.ConvertEquals(xna.CompareTo(xna2), anx.CompareTo(anx2), "CompareTo"); + } + + [TestCaseSource("sixteenfloats")] + public void op_Equality(float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKey xna = new XNACurveKey(a1, a2, a3, a4); + XNACurveKey xna2 = new XNACurveKey(a2, a1, a3, a4); + ANXCurveKey anx = new ANXCurveKey(a1, a2, a3, a4); + ANXCurveKey anx2 = new ANXCurveKey(a2, a1, a3, a4); + + + AssertHelper.ConvertEquals(xna==xna2, anx==anx2, "op_Equality"); + } + + [TestCaseSource("sixteenfloats")] + public void op_Equality2(float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKey xna = new XNACurveKey(a1, a2, a3, a4); + XNACurveKey xna2 = new XNACurveKey(a2, a1, a3, a4); + ANXCurveKey anx = new ANXCurveKey(a1, a2, a3, a4); + ANXCurveKey anx2 = new ANXCurveKey(a2, a1, a3, a4); + + + AssertHelper.ConvertEquals(xna == null, anx == null, "op_Equality2"); + } + [TestCaseSource("sixteenfloats")] + public void op_Unequality(float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKey xna = new XNACurveKey(a1, a2, a3, a4); + XNACurveKey xna2 = new XNACurveKey(a2, a1, a3, a4); + ANXCurveKey anx = new ANXCurveKey(a1, a2, a3, a4); + ANXCurveKey anx2 = new ANXCurveKey(a2, a1, a3, a4); + + + AssertHelper.ConvertEquals(xna != xna2, anx != anx2, "op_Unequality"); + } + [TestCaseSource("sixteenfloats")] + public void op_Unequality2(float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKey xna = new XNACurveKey(a1, a2, a3, a4); + XNACurveKey xna2 = new XNACurveKey(a2, a1, a3, a4); + ANXCurveKey anx = new ANXCurveKey(a1, a2, a3, a4); + ANXCurveKey anx2 = new ANXCurveKey(a2, a1, a3, a4); + + + AssertHelper.ConvertEquals(xna != null, anx != null, "op_Unequality2"); + } + [TestCaseSource("sixteenfloats")] + public void GetHashCode(float a1, float a2, float a3, float a4, float a5, float a6, float a7, float a8, float a9, float a10, float a11, float a12, float a13, float a14, float a15, float a16) + { + XNACurveKey xna = new XNACurveKey(a1, a2, a3, a4); + XNACurveKey xna2 = new XNACurveKey(a2, a1, a3, a4); + ANXCurveKey anx = new ANXCurveKey(a1, a2, a3, a4); + ANXCurveKey anx2 = new ANXCurveKey(a2, a1, a3, a4); + + + AssertHelper.ConvertEquals(xna.GetHashCode(), anx.GetHashCode(), "GetHashCode"); + } + } +}