diff --git a/ANX.Framework.TestCenter/Strukturen/CurveKeyTest.cs b/ANX.Framework.TestCenter/Strukturen/CurveKeyTest.cs index bc594b82..6b46a67a 100644 --- a/ANX.Framework.TestCenter/Strukturen/CurveKeyTest.cs +++ b/ANX.Framework.TestCenter/Strukturen/CurveKeyTest.cs @@ -32,8 +32,6 @@ namespace ANX.Framework.TestCenter.Strukturen [TestFixture] public class CurveKeyTest { - - #region Testdata static object[] sixteenfloats = { diff --git a/ANX.Framework.TestCenter/Strukturen/CurveTest.cs b/ANX.Framework.TestCenter/Strukturen/CurveTest.cs index 65f3bdb8..2e43adc5 100644 --- a/ANX.Framework.TestCenter/Strukturen/CurveTest.cs +++ b/ANX.Framework.TestCenter/Strukturen/CurveTest.cs @@ -1,7 +1,5 @@ #region Using Statements using System; -using System.IO; -using ANX.Framework.NonXNA; using NUnit.Framework; #endregion // Using Statements @@ -20,8 +18,6 @@ using ANXCurveKeyCollection = ANX.Framework.CurveKeyCollection; using XNACurveTangent = Microsoft.Xna.Framework.CurveTangent; using ANXCurveTangent = ANX.Framework.CurveTangent; - - // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license @@ -31,23 +27,825 @@ namespace ANX.Framework.TestCenter.Strukturen class CurveTest { #region TestCase - static object[] inoutsame = + private static object[] inoutsame = + { + new object[] + { + XNACurveTangent.Flat, ANXCurveTangent.Flat, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + }, + new object[] + { + XNACurveTangent.Linear, ANXCurveTangent.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + }, + new object[] + { + XNACurveTangent.Smooth, ANXCurveTangent.Smooth, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + } + }; + + private static object[] inoutsameErr = + { + new object[] + { + XNACurveTangent.Linear, ANXCurveTangent.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveTangent.Smooth, ANXCurveTangent.Smooth, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 10 + } + }; + + private static object[] inoutnotsame = + { + new object[] + { + XNACurveTangent.Flat, ANXCurveTangent.Flat, XNACurveTangent.Flat, ANXCurveTangent.Flat, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + }, + new object[] + { + XNACurveTangent.Flat, ANXCurveTangent.Flat, XNACurveTangent.Linear, ANXCurveTangent.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + }, + new object[] + { + XNACurveTangent.Flat, ANXCurveTangent.Flat, XNACurveTangent.Smooth, ANXCurveTangent.Smooth, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + }, + new object[] + { + XNACurveTangent.Linear, ANXCurveTangent.Linear, XNACurveTangent.Flat, ANXCurveTangent.Flat, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + }, + new object[] + { + XNACurveTangent.Linear, ANXCurveTangent.Linear, XNACurveTangent.Linear, ANXCurveTangent.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + }, + new object[] + { + XNACurveTangent.Linear, ANXCurveTangent.Linear, XNACurveTangent.Smooth, ANXCurveTangent.Smooth, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + }, + new object[] + { + XNACurveTangent.Smooth, ANXCurveTangent.Smooth, XNACurveTangent.Flat, ANXCurveTangent.Flat, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + }, + new object[] + { + XNACurveTangent.Smooth, ANXCurveTangent.Smooth, XNACurveTangent.Linear, ANXCurveTangent.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + }, + new object[] + { + XNACurveTangent.Smooth, ANXCurveTangent.Smooth, XNACurveTangent.Smooth, ANXCurveTangent.Smooth, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f + } + }; + + private static object[] Evaluatesamples = + { + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Constant, XNACurveLoopType.Constant, ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Cycle, XNACurveLoopType.Constant, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Constant, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Linear, XNACurveLoopType.Constant, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Oscillate, XNACurveLoopType.Constant, + ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Constant, XNACurveLoopType.Cycle, ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Cycle, XNACurveLoopType.Cycle, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Cycle, ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Linear, XNACurveLoopType.Cycle, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Oscillate, XNACurveLoopType.Cycle, ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Constant, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Cycle, XNACurveLoopType.CycleOffset, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.CycleOffset, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Linear, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Oscillate, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Constant, XNACurveLoopType.Linear, ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Cycle, XNACurveLoopType.Linear, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Linear, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Linear, XNACurveLoopType.Linear, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Oscillate, XNACurveLoopType.Linear, ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Constant, XNACurveLoopType.Oscillate, + ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Cycle, XNACurveLoopType.Oscillate, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Oscillate, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Linear, XNACurveLoopType.Oscillate, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Oscillate, XNACurveLoopType.Oscillate, + ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, -1 + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Constant, XNACurveLoopType.Constant, ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Cycle, XNACurveLoopType.Constant, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Constant, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Linear, XNACurveLoopType.Constant, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Oscillate, XNACurveLoopType.Constant, + ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Constant, XNACurveLoopType.Cycle, ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Cycle, XNACurveLoopType.Cycle, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Cycle, ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Linear, XNACurveLoopType.Cycle, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Oscillate, XNACurveLoopType.Cycle, ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Constant, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Cycle, XNACurveLoopType.CycleOffset, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.CycleOffset, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Linear, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Oscillate, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Constant, XNACurveLoopType.Linear, ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Cycle, XNACurveLoopType.Linear, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Linear, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Linear, XNACurveLoopType.Linear, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Oscillate, XNACurveLoopType.Linear, ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Constant, XNACurveLoopType.Oscillate, + ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Cycle, XNACurveLoopType.Oscillate, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Oscillate, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Linear, XNACurveLoopType.Oscillate, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Oscillate, XNACurveLoopType.Oscillate, + ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, 20 + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Constant, XNACurveLoopType.Constant, ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Cycle, XNACurveLoopType.Constant, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Constant, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Linear, XNACurveLoopType.Constant, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Constant, ANXCurveLoopType.Oscillate, XNACurveLoopType.Constant, + ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Constant, XNACurveLoopType.Cycle, ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Cycle, XNACurveLoopType.Cycle, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Cycle, ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Linear, XNACurveLoopType.Cycle, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Cycle, ANXCurveLoopType.Oscillate, XNACurveLoopType.Cycle, ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Constant, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Cycle, XNACurveLoopType.CycleOffset, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.CycleOffset, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Linear, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.CycleOffset, ANXCurveLoopType.Oscillate, XNACurveLoopType.CycleOffset, + ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Constant, XNACurveLoopType.Linear, ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Cycle, XNACurveLoopType.Linear, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Linear, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Linear, XNACurveLoopType.Linear, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Linear, ANXCurveLoopType.Oscillate, XNACurveLoopType.Linear, ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Constant, XNACurveLoopType.Oscillate, + ANXCurveLoopType.Constant, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Cycle, XNACurveLoopType.Oscillate, ANXCurveLoopType.Cycle, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.CycleOffset, XNACurveLoopType.Oscillate, + ANXCurveLoopType.CycleOffset, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Linear, XNACurveLoopType.Oscillate, ANXCurveLoopType.Linear, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + new object[] + { + XNACurveLoopType.Oscillate, ANXCurveLoopType.Oscillate, XNACurveLoopType.Oscillate, + ANXCurveLoopType.Oscillate, + 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f, + DataFactory.RandomValueMinMax(float.Epsilon, 1000) + }, + }; + #endregion + + [TestCaseSource("inoutsame")] + public void Curve(XNACurveTangent xnainout, ANXCurveTangent anxinout, float f1, float f2, float f3, float f4, + float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, + float f15, float f16) { - //new object[] {XNACurveTangent.Flat,ANXCurveTangent.Flat , 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[] {XNACurveTangent.Linear,ANXCurveTangent.Linear, 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[] {XNACurveTangent.Smooth,ANXCurveTangent.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[] {XNACurveTangent.Flat,ANXCurveTangent.Flat , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f }, - new object[] {XNACurveTangent.Linear,ANXCurveTangent.Linear, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f}, - new object[] {XNACurveTangent.Smooth,ANXCurveTangent.Smooth, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f} + XNACurve xna = new XNACurve(); + ANXCurve anx = new ANXCurve(); - }; + xna.Keys.Add(new XNACurveKey(f1, f2)); + xna.Keys.Add(new XNACurveKey(f3, f4)); + xna.Keys.Add(new XNACurveKey(f5, f6)); + xna.Keys.Add(new XNACurveKey(f7, f8)); + xna.Keys.Add(new XNACurveKey(f9, f10)); + xna.Keys.Add(new XNACurveKey(f11, f12)); + xna.Keys.Add(new XNACurveKey(f13, f14)); + xna.Keys.Add(new XNACurveKey(f15, f16)); - static object[] inoutsameErr = + anx.Keys.Add(new ANXCurveKey(f1, f2)); + anx.Keys.Add(new ANXCurveKey(f3, f4)); + anx.Keys.Add(new ANXCurveKey(f5, f6)); + anx.Keys.Add(new ANXCurveKey(f7, f8)); + anx.Keys.Add(new ANXCurveKey(f9, f10)); + anx.Keys.Add(new ANXCurveKey(f11, f12)); + anx.Keys.Add(new ANXCurveKey(f13, f14)); + anx.Keys.Add(new ANXCurveKey(f15, f16)); + + AssertHelper.ConvertEquals(xna, anx, "Curve"); + } + + [TestCaseSource("inoutsame")] + public void Clone(XNACurveTangent xnainout, ANXCurveTangent anxinout, float f1, float f2, float f3, float f4, + float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, + float f15, float f16) { - new object[] {XNACurveTangent.Linear,ANXCurveTangent.Linear, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1}, - new object[] {XNACurveTangent.Smooth,ANXCurveTangent.Smooth, 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,10} + XNACurve xna = new XNACurve(); + ANXCurve anx = new ANXCurve(); + + xna.Keys.Add(new XNACurveKey(f1, f2)); + xna.Keys.Add(new XNACurveKey(f3, f4)); + xna.Keys.Add(new XNACurveKey(f5, f6)); + xna.Keys.Add(new XNACurveKey(f7, f8)); + xna.Keys.Add(new XNACurveKey(f9, f10)); + xna.Keys.Add(new XNACurveKey(f11, f12)); + xna.Keys.Add(new XNACurveKey(f13, f14)); + xna.Keys.Add(new XNACurveKey(f15, f16)); + + anx.Keys.Add(new ANXCurveKey(f1, f2)); + anx.Keys.Add(new ANXCurveKey(f3, f4)); + anx.Keys.Add(new ANXCurveKey(f5, f6)); + anx.Keys.Add(new ANXCurveKey(f7, f8)); + anx.Keys.Add(new ANXCurveKey(f9, f10)); + anx.Keys.Add(new ANXCurveKey(f11, f12)); + anx.Keys.Add(new ANXCurveKey(f13, f14)); + anx.Keys.Add(new ANXCurveKey(f15, f16)); + + XNACurve xna2 = xna.Clone(); + ANXCurve anx2 = anx.Clone(); + + AssertHelper.ConvertEquals(xna, xna2, anx, anx2, "Clone"); + } + + [TestCaseSource("inoutsame")] + public void ComputeTangents(XNACurveTangent xnainout, ANXCurveTangent anxinout, float f1, float f2, float f3, float f4, + float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, + float f16) + { + XNACurve xna = new XNACurve(); + ANXCurve anx = new ANXCurve(); + + xna.Keys.Add(new XNACurveKey(f1, f2)); + xna.Keys.Add(new XNACurveKey(f3, f4)); + xna.Keys.Add(new XNACurveKey(f5, f6)); + xna.Keys.Add(new XNACurveKey(f7, f8)); + xna.Keys.Add(new XNACurveKey(f9, f10)); + xna.Keys.Add(new XNACurveKey(f11, f12)); + xna.Keys.Add(new XNACurveKey(f13, f14)); + xna.Keys.Add(new XNACurveKey(f15, f16)); + + anx.Keys.Add(new ANXCurveKey(f1, f2)); + anx.Keys.Add(new ANXCurveKey(f3, f4)); + anx.Keys.Add(new ANXCurveKey(f5, f6)); + anx.Keys.Add(new ANXCurveKey(f7, f8)); + anx.Keys.Add(new ANXCurveKey(f9, f10)); + anx.Keys.Add(new ANXCurveKey(f11, f12)); + anx.Keys.Add(new ANXCurveKey(f13, f14)); + anx.Keys.Add(new ANXCurveKey(f15, f16)); + + xna.ComputeTangents(xnainout); + anx.ComputeTangents(anxinout); + + AssertHelper.ConvertEquals(xna, anx, "ComputeTangents"); + } + + [TestCaseSource("inoutsameErr")] + public void ComputeTangent(XNACurveTangent xnainout, ANXCurveTangent anxinout, float f1, float f2, float f3, float f4, + float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, + float f16,int pos) + { + XNACurve xna = new XNACurve(); + ANXCurve anx = new ANXCurve(); + + xna.Keys.Add(new XNACurveKey(f1, f2)); + xna.Keys.Add(new XNACurveKey(f3, f4)); + xna.Keys.Add(new XNACurveKey(f5, f6)); + xna.Keys.Add(new XNACurveKey(f7, f8)); + xna.Keys.Add(new XNACurveKey(f9, f10)); + xna.Keys.Add(new XNACurveKey(f11, f12)); + xna.Keys.Add(new XNACurveKey(f13, f14)); + xna.Keys.Add(new XNACurveKey(f15, f16)); + + anx.Keys.Add(new ANXCurveKey(f1, f2)); + anx.Keys.Add(new ANXCurveKey(f3, f4)); + anx.Keys.Add(new ANXCurveKey(f5, f6)); + anx.Keys.Add(new ANXCurveKey(f7, f8)); + anx.Keys.Add(new ANXCurveKey(f9, f10)); + anx.Keys.Add(new ANXCurveKey(f11, f12)); + anx.Keys.Add(new ANXCurveKey(f13, f14)); + anx.Keys.Add(new ANXCurveKey(f15, f16)); + + xna.ComputeTangents(xnainout); + anx.ComputeTangents(anxinout); + + TestDelegate xnaDelegate = delegate { xna.ComputeTangent(pos, xnainout); }; + TestDelegate anxDelegate = delegate { anx.ComputeTangent(pos, anxinout); }; + + AssertHelper.ConvertEquals(Assert.Throws(xnaDelegate), + Assert.Throws(anxDelegate), "ComputeTangentE"); + } + + [TestCaseSource("inoutsameErr")] + public void ComputeTangent2(XNACurveTangent xnainout, ANXCurveTangent anxinout, float f1, float f2, float f3, float f4, + float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, + float f16, int pos) + { + XNACurve xna = new XNACurve(); + ANXCurve anx = new ANXCurve(); + + xna.Keys.Add(new XNACurveKey(f1, f2)); + xna.Keys.Add(new XNACurveKey(f3, f4)); + xna.Keys.Add(new XNACurveKey(f5, f6)); + xna.Keys.Add(new XNACurveKey(f7, f8)); + xna.Keys.Add(new XNACurveKey(f9, f10)); + xna.Keys.Add(new XNACurveKey(f11, f12)); + xna.Keys.Add(new XNACurveKey(f13, f14)); + xna.Keys.Add(new XNACurveKey(f15, f16)); + + anx.Keys.Add(new ANXCurveKey(f1, f2)); + anx.Keys.Add(new ANXCurveKey(f3, f4)); + anx.Keys.Add(new ANXCurveKey(f5, f6)); + anx.Keys.Add(new ANXCurveKey(f7, f8)); + anx.Keys.Add(new ANXCurveKey(f9, f10)); + anx.Keys.Add(new ANXCurveKey(f11, f12)); + anx.Keys.Add(new ANXCurveKey(f13, f14)); + anx.Keys.Add(new ANXCurveKey(f15, f16)); + + xna.ComputeTangents(xnainout); + anx.ComputeTangents(anxinout); + + TestDelegate xnaDelegate = delegate { xna.ComputeTangent(pos, xnainout, xnainout); }; + TestDelegate anxDelegate = delegate { anx.ComputeTangent(pos, anxinout, anxinout); }; + + AssertHelper.ConvertEquals(Assert.Throws(xnaDelegate), + Assert.Throws(anxDelegate), "ComputeTangentE2"); + } + + [TestCaseSource("inoutnotsame")] + public void ComputeTangents(XNACurveTangent xnain, ANXCurveTangent anxin, XNACurveTangent xnaout, + ANXCurveTangent anxout, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, + float f10, float f11, float f12, float f13, float f14, float f15, float f16) + { + XNACurve xna = new XNACurve(); + ANXCurve anx = new ANXCurve(); + + xna.Keys.Add(new XNACurveKey(f1, f2)); + xna.Keys.Add(new XNACurveKey(f3, f4)); + xna.Keys.Add(new XNACurveKey(f5, f6)); + xna.Keys.Add(new XNACurveKey(f7, f8)); + xna.Keys.Add(new XNACurveKey(f9, f10)); + xna.Keys.Add(new XNACurveKey(f11, f12)); + xna.Keys.Add(new XNACurveKey(f13, f14)); + xna.Keys.Add(new XNACurveKey(f15, f16)); + + anx.Keys.Add(new ANXCurveKey(f1, f2)); + anx.Keys.Add(new ANXCurveKey(f3, f4)); + anx.Keys.Add(new ANXCurveKey(f5, f6)); + anx.Keys.Add(new ANXCurveKey(f7, f8)); + anx.Keys.Add(new ANXCurveKey(f9, f10)); + anx.Keys.Add(new ANXCurveKey(f11, f12)); + anx.Keys.Add(new ANXCurveKey(f13, f14)); + anx.Keys.Add(new ANXCurveKey(f15, f16)); + + xna.ComputeTangents(xnain,xnaout); + anx.ComputeTangents(anxin,anxout); + + AssertHelper.ConvertEquals(xna, anx, "ComputeTangents2"); + } + + [TestCaseSource("Evaluatesamples")] + public void EvaluateFlat(XNACurveLoopType xnapre, XNACurveLoopType xnapost, ANXCurveLoopType anxpre, + ANXCurveLoopType anxpost, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, + float f10, float f11, float f12, float f13, float f14, float f15, float f16, float pos) + { + XNACurve xna = new XNACurve { PreLoop = xnapre, PostLoop = xnapost }; + ANXCurve anx = new ANXCurve { PreLoop = anxpre, PostLoop = anxpost }; + + xna.ComputeTangents(XNACurveTangent.Flat); + anx.ComputeTangents(ANXCurveTangent.Flat); + + xna.Keys.Add(new XNACurveKey(f1, f2)); + xna.Keys.Add(new XNACurveKey(f3, f4)); + xna.Keys.Add(new XNACurveKey(f5, f6)); + xna.Keys.Add(new XNACurveKey(f7, f8)); + xna.Keys.Add(new XNACurveKey(f9, f10)); + xna.Keys.Add(new XNACurveKey(f11, f12)); + xna.Keys.Add(new XNACurveKey(f13, f14)); + xna.Keys.Add(new XNACurveKey(f15, f16)); + + anx.Keys.Add(new ANXCurveKey(f1, f2)); + anx.Keys.Add(new ANXCurveKey(f3, f4)); + anx.Keys.Add(new ANXCurveKey(f5, f6)); + anx.Keys.Add(new ANXCurveKey(f7, f8)); + anx.Keys.Add(new ANXCurveKey(f9, f10)); + anx.Keys.Add(new ANXCurveKey(f11, f12)); + anx.Keys.Add(new ANXCurveKey(f13, f14)); + anx.Keys.Add(new ANXCurveKey(f15, f16)); + + AssertHelper.ConvertEquals(xna.Evaluate(pos), anx.Evaluate(pos), "Evaluate"); + } + + [TestCaseSource("Evaluatesamples")] + public void EvaluateLinear(XNACurveLoopType xnapre, XNACurveLoopType xnapost, ANXCurveLoopType anxpre, + ANXCurveLoopType anxpost, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, + float f10, float f11, float f12, float f13, float f14, float f15, float f16, float pos) + { + XNACurve xna = new XNACurve { PreLoop = xnapre, PostLoop = xnapost }; + ANXCurve anx = new ANXCurve { PreLoop = anxpre, PostLoop = anxpost }; + + xna.ComputeTangents(XNACurveTangent.Linear); + anx.ComputeTangents(ANXCurveTangent.Linear); + + xna.Keys.Add(new XNACurveKey(f1, f2)); + xna.Keys.Add(new XNACurveKey(f3, f4)); + xna.Keys.Add(new XNACurveKey(f5, f6)); + xna.Keys.Add(new XNACurveKey(f7, f8)); + xna.Keys.Add(new XNACurveKey(f9, f10)); + xna.Keys.Add(new XNACurveKey(f11, f12)); + xna.Keys.Add(new XNACurveKey(f13, f14)); + xna.Keys.Add(new XNACurveKey(f15, f16)); + + anx.Keys.Add(new ANXCurveKey(f1, f2)); + anx.Keys.Add(new ANXCurveKey(f3, f4)); + anx.Keys.Add(new ANXCurveKey(f5, f6)); + anx.Keys.Add(new ANXCurveKey(f7, f8)); + anx.Keys.Add(new ANXCurveKey(f9, f10)); + anx.Keys.Add(new ANXCurveKey(f11, f12)); + anx.Keys.Add(new ANXCurveKey(f13, f14)); + anx.Keys.Add(new ANXCurveKey(f15, f16)); + + AssertHelper.ConvertEquals(xna.Evaluate(pos), anx.Evaluate(pos), "Evaluate"); + } + + [TestCaseSource("Evaluatesamples")] + public void EvaluateSmooth(XNACurveLoopType xnapre, XNACurveLoopType xnapost, ANXCurveLoopType anxpre, + ANXCurveLoopType anxpost, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, + float f10, float f11, float f12, float f13, float f14, float f15, float f16, float pos) + { + XNACurve xna = new XNACurve {PreLoop = xnapre, PostLoop = xnapost}; + ANXCurve anx = new ANXCurve {PreLoop = anxpre, PostLoop = anxpost}; + + xna.ComputeTangents(XNACurveTangent.Smooth); + anx.ComputeTangents(ANXCurveTangent.Smooth); + + xna.Keys.Add(new XNACurveKey(f1, f2)); + xna.Keys.Add(new XNACurveKey(f3, f4)); + xna.Keys.Add(new XNACurveKey(f5, f6)); + xna.Keys.Add(new XNACurveKey(f7, f8)); + xna.Keys.Add(new XNACurveKey(f9, f10)); + xna.Keys.Add(new XNACurveKey(f11, f12)); + xna.Keys.Add(new XNACurveKey(f13, f14)); + xna.Keys.Add(new XNACurveKey(f15, f16)); + + anx.Keys.Add(new ANXCurveKey(f1, f2)); + anx.Keys.Add(new ANXCurveKey(f3, f4)); + anx.Keys.Add(new ANXCurveKey(f5, f6)); + anx.Keys.Add(new ANXCurveKey(f7, f8)); + anx.Keys.Add(new ANXCurveKey(f9, f10)); + anx.Keys.Add(new ANXCurveKey(f11, f12)); + anx.Keys.Add(new ANXCurveKey(f13, f14)); + anx.Keys.Add(new ANXCurveKey(f15, f16)); + + AssertHelper.ConvertEquals(xna.Evaluate(pos), anx.Evaluate(pos), "Evaluate"); + } + } +} +#if OLD_TEST_DATA + private static object[] inoutsame = + { + //new object[] {XNACurveTangent.Flat,ANXCurveTangent.Flat , 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[] {XNACurveTangent.Linear,ANXCurveTangent.Linear, 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[] {XNACurveTangent.Smooth,ANXCurveTangent.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)}, + }; - }; static object[] inoutnotsame = { // new object[] {XNACurveTangent.Flat,ANXCurveTangent.Flat ,XNACurveTangent.Flat,ANXCurveTangent.Flat , 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) }, @@ -59,17 +857,8 @@ namespace ANX.Framework.TestCenter.Strukturen // new object[] {XNACurveTangent.Smooth,ANXCurveTangent.Smooth,XNACurveTangent.Flat,ANXCurveTangent.Flat , 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[] {XNACurveTangent.Smooth,ANXCurveTangent.Smooth,XNACurveTangent.Linear,ANXCurveTangent.Linear , 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[] {XNACurveTangent.Smooth,ANXCurveTangent.Smooth,XNACurveTangent.Smooth,ANXCurveTangent.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[] {XNACurveTangent.Flat,ANXCurveTangent.Flat ,XNACurveTangent.Flat,ANXCurveTangent.Flat , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f }, - new object[] {XNACurveTangent.Flat,ANXCurveTangent.Flat ,XNACurveTangent.Linear,ANXCurveTangent.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f }, - new object[] {XNACurveTangent.Flat,ANXCurveTangent.Flat ,XNACurveTangent.Smooth,ANXCurveTangent.Smooth , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f }, - new object[] {XNACurveTangent.Linear,ANXCurveTangent.Linear,XNACurveTangent.Flat,ANXCurveTangent.Flat , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f}, - new object[] {XNACurveTangent.Linear,ANXCurveTangent.Linear,XNACurveTangent.Linear,ANXCurveTangent.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f}, - new object[] {XNACurveTangent.Linear,ANXCurveTangent.Linear,XNACurveTangent.Smooth,ANXCurveTangent.Smooth , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f}, - new object[] {XNACurveTangent.Smooth,ANXCurveTangent.Smooth,XNACurveTangent.Flat,ANXCurveTangent.Flat ,1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f}, - new object[] {XNACurveTangent.Smooth,ANXCurveTangent.Smooth,XNACurveTangent.Linear,ANXCurveTangent.Linear ,1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f}, - new object[] {XNACurveTangent.Smooth,ANXCurveTangent.Smooth,XNACurveTangent.Smooth,ANXCurveTangent.Smooth ,1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f} - }; + static object[] Evaluatesamples = { /* new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Constant , XNACurveLoopType.Constant , ANXCurveLoopType.Constant , 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),-1 }, @@ -147,367 +936,6 @@ namespace ANX.Framework.TestCenter.Strukturen new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Oscillate , ANXCurveLoopType.CycleOffset , 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),DataFactory.RandomValueMinMax(float.Epsilon, 1000)}, new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Linear , XNACurveLoopType.Oscillate , ANXCurveLoopType.Linear , 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),DataFactory.RandomValueMinMax(float.Epsilon, 1000)}, new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Oscillate , XNACurveLoopType.Oscillate , ANXCurveLoopType.Oscillate , 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),DataFactory.RandomValueMinMax(float.Epsilon, 1000)}, - */ new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Constant , XNACurveLoopType.Constant , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Cycle , XNACurveLoopType.Constant , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Constant , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Linear , XNACurveLoopType.Constant , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Oscillate , XNACurveLoopType.Constant , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Constant , XNACurveLoopType.Cycle , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Cycle , XNACurveLoopType.Cycle , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Cycle , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Linear , XNACurveLoopType.Cycle , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Oscillate , XNACurveLoopType.Cycle , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Constant , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Cycle , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.CycleOffset , XNACurveLoopType.CycleOffset , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Linear , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Oscillate , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Constant , XNACurveLoopType.Linear , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Cycle , XNACurveLoopType.Linear , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Linear , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Linear , XNACurveLoopType.Linear , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Oscillate , XNACurveLoopType.Linear , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Constant , XNACurveLoopType.Oscillate , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Cycle , XNACurveLoopType.Oscillate , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Oscillate , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Linear , XNACurveLoopType.Oscillate , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Oscillate , XNACurveLoopType.Oscillate , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,-1 }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Constant , XNACurveLoopType.Constant , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Cycle , XNACurveLoopType.Constant , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Constant , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Linear , XNACurveLoopType.Constant , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Oscillate , XNACurveLoopType.Constant , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Constant , XNACurveLoopType.Cycle , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Cycle , XNACurveLoopType.Cycle , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Cycle , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Linear , XNACurveLoopType.Cycle , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Oscillate , XNACurveLoopType.Cycle , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Constant , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Cycle , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.CycleOffset , XNACurveLoopType.CycleOffset , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Linear , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Oscillate , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Constant , XNACurveLoopType.Linear , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Cycle , XNACurveLoopType.Linear , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Linear , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Linear , XNACurveLoopType.Linear , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Oscillate , XNACurveLoopType.Linear , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Constant , XNACurveLoopType.Oscillate , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Cycle , XNACurveLoopType.Oscillate , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Oscillate , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Linear , XNACurveLoopType.Oscillate , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Oscillate , XNACurveLoopType.Oscillate , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,20 }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Constant , XNACurveLoopType.Constant , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Cycle , XNACurveLoopType.Constant , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Constant , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Linear , XNACurveLoopType.Constant , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Constant , ANXCurveLoopType.Oscillate , XNACurveLoopType.Constant , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Constant , XNACurveLoopType.Cycle , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Cycle , XNACurveLoopType.Cycle , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Cycle , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Linear , XNACurveLoopType.Cycle , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Cycle , ANXCurveLoopType.Oscillate , XNACurveLoopType.Cycle , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Constant , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Cycle , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.CycleOffset , XNACurveLoopType.CycleOffset , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Linear , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.CycleOffset , ANXCurveLoopType.Oscillate , XNACurveLoopType.CycleOffset , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Constant , XNACurveLoopType.Linear , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Cycle , XNACurveLoopType.Linear , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Linear , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Linear , XNACurveLoopType.Linear , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Linear , ANXCurveLoopType.Oscillate , XNACurveLoopType.Linear , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Constant , XNACurveLoopType.Oscillate , ANXCurveLoopType.Constant , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Cycle , XNACurveLoopType.Oscillate , ANXCurveLoopType.Cycle , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.CycleOffset , XNACurveLoopType.Oscillate , ANXCurveLoopType.CycleOffset , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Linear , XNACurveLoopType.Oscillate , ANXCurveLoopType.Linear , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - new object[] {XNACurveLoopType.Oscillate , ANXCurveLoopType.Oscillate , XNACurveLoopType.Oscillate , ANXCurveLoopType.Oscillate , 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f, 11f, 12f, 13f, 14f, 15f, 16f,DataFactory.RandomValueMinMax(float.Epsilon, 1000) }, - + */ }; - - #endregion - - [TestCaseSource("inoutsame")] - public void Curve(XNACurveTangent xnainout, ANXCurveTangent anxinout, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, float f16) - { - XNACurve xna = new XNACurve(); - ANXCurve anx = new ANXCurve(); - - xna.Keys.Add(new XNACurveKey(f1, f2)); - xna.Keys.Add(new XNACurveKey(f3, f4)); - xna.Keys.Add(new XNACurveKey(f5, f6)); - xna.Keys.Add(new XNACurveKey(f7, f8)); - xna.Keys.Add(new XNACurveKey(f9, f10)); - xna.Keys.Add(new XNACurveKey(f11, f12)); - xna.Keys.Add(new XNACurveKey(f13, f14)); - xna.Keys.Add(new XNACurveKey(f15, f16)); - - anx.Keys.Add(new ANXCurveKey(f1, f2)); - anx.Keys.Add(new ANXCurveKey(f3, f4)); - anx.Keys.Add(new ANXCurveKey(f5, f6)); - anx.Keys.Add(new ANXCurveKey(f7, f8)); - anx.Keys.Add(new ANXCurveKey(f9, f10)); - anx.Keys.Add(new ANXCurveKey(f11, f12)); - anx.Keys.Add(new ANXCurveKey(f13, f14)); - anx.Keys.Add(new ANXCurveKey(f15, f16)); - - AssertHelper.ConvertEquals(xna, anx, "Curve"); - } - - [TestCaseSource("inoutsame")] - public void Clone(XNACurveTangent xnainout, ANXCurveTangent anxinout, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, float f16) - { - XNACurve xna = new XNACurve(); - ANXCurve anx = new ANXCurve(); - - xna.Keys.Add(new XNACurveKey(f1, f2)); - xna.Keys.Add(new XNACurveKey(f3, f4)); - xna.Keys.Add(new XNACurveKey(f5, f6)); - xna.Keys.Add(new XNACurveKey(f7, f8)); - xna.Keys.Add(new XNACurveKey(f9, f10)); - xna.Keys.Add(new XNACurveKey(f11, f12)); - xna.Keys.Add(new XNACurveKey(f13, f14)); - xna.Keys.Add(new XNACurveKey(f15, f16)); - - anx.Keys.Add(new ANXCurveKey(f1, f2)); - anx.Keys.Add(new ANXCurveKey(f3, f4)); - anx.Keys.Add(new ANXCurveKey(f5, f6)); - anx.Keys.Add(new ANXCurveKey(f7, f8)); - anx.Keys.Add(new ANXCurveKey(f9, f10)); - anx.Keys.Add(new ANXCurveKey(f11, f12)); - anx.Keys.Add(new ANXCurveKey(f13, f14)); - anx.Keys.Add(new ANXCurveKey(f15, f16)); - - XNACurve xna2 = xna.Clone(); - ANXCurve anx2 = anx.Clone(); - - AssertHelper.ConvertEquals(xna, xna2, anx, anx2, "Clone"); - - } - - [TestCaseSource("inoutsame")] - public void ComputeTangents(XNACurveTangent xnainout, ANXCurveTangent anxinout, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, float f16) - { - XNACurve xna = new XNACurve(); - ANXCurve anx = new ANXCurve(); - - xna.Keys.Add(new XNACurveKey(f1, f2)); - xna.Keys.Add(new XNACurveKey(f3, f4)); - xna.Keys.Add(new XNACurveKey(f5, f6)); - xna.Keys.Add(new XNACurveKey(f7, f8)); - xna.Keys.Add(new XNACurveKey(f9, f10)); - xna.Keys.Add(new XNACurveKey(f11, f12)); - xna.Keys.Add(new XNACurveKey(f13, f14)); - xna.Keys.Add(new XNACurveKey(f15, f16)); - - anx.Keys.Add(new ANXCurveKey(f1, f2)); - anx.Keys.Add(new ANXCurveKey(f3, f4)); - anx.Keys.Add(new ANXCurveKey(f5, f6)); - anx.Keys.Add(new ANXCurveKey(f7, f8)); - anx.Keys.Add(new ANXCurveKey(f9, f10)); - anx.Keys.Add(new ANXCurveKey(f11, f12)); - anx.Keys.Add(new ANXCurveKey(f13, f14)); - anx.Keys.Add(new ANXCurveKey(f15, f16)); - - xna.ComputeTangents(xnainout); - anx.ComputeTangents(anxinout); - - AssertHelper.ConvertEquals(xna, anx, "ComputeTangents"); - } - - [TestCaseSource("inoutsameErr")] - public void ComputeTangent(XNACurveTangent xnainout, ANXCurveTangent anxinout, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, float f16,int pos) - { - XNACurve xna = new XNACurve(); - ANXCurve anx = new ANXCurve(); - - xna.Keys.Add(new XNACurveKey(f1, f2)); - xna.Keys.Add(new XNACurveKey(f3, f4)); - xna.Keys.Add(new XNACurveKey(f5, f6)); - xna.Keys.Add(new XNACurveKey(f7, f8)); - xna.Keys.Add(new XNACurveKey(f9, f10)); - xna.Keys.Add(new XNACurveKey(f11, f12)); - xna.Keys.Add(new XNACurveKey(f13, f14)); - xna.Keys.Add(new XNACurveKey(f15, f16)); - - anx.Keys.Add(new ANXCurveKey(f1, f2)); - anx.Keys.Add(new ANXCurveKey(f3, f4)); - anx.Keys.Add(new ANXCurveKey(f5, f6)); - anx.Keys.Add(new ANXCurveKey(f7, f8)); - anx.Keys.Add(new ANXCurveKey(f9, f10)); - anx.Keys.Add(new ANXCurveKey(f11, f12)); - anx.Keys.Add(new ANXCurveKey(f13, f14)); - anx.Keys.Add(new ANXCurveKey(f15, f16)); - - xna.ComputeTangents(xnainout); - anx.ComputeTangents(anxinout); - - AssertHelper.ConvertEquals(Assert.Throws(delegate { xna.ComputeTangent(pos, xnainout); }), Assert.Throws(delegate { anx.ComputeTangent(pos, anxinout); }), "ComputeTangentE"); - } - [TestCaseSource("inoutsameErr")] - public void ComputeTangent2(XNACurveTangent xnainout, ANXCurveTangent anxinout, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, float f16, int pos) - { - XNACurve xna = new XNACurve(); - ANXCurve anx = new ANXCurve(); - - xna.Keys.Add(new XNACurveKey(f1, f2)); - xna.Keys.Add(new XNACurveKey(f3, f4)); - xna.Keys.Add(new XNACurveKey(f5, f6)); - xna.Keys.Add(new XNACurveKey(f7, f8)); - xna.Keys.Add(new XNACurveKey(f9, f10)); - xna.Keys.Add(new XNACurveKey(f11, f12)); - xna.Keys.Add(new XNACurveKey(f13, f14)); - xna.Keys.Add(new XNACurveKey(f15, f16)); - - anx.Keys.Add(new ANXCurveKey(f1, f2)); - anx.Keys.Add(new ANXCurveKey(f3, f4)); - anx.Keys.Add(new ANXCurveKey(f5, f6)); - anx.Keys.Add(new ANXCurveKey(f7, f8)); - anx.Keys.Add(new ANXCurveKey(f9, f10)); - anx.Keys.Add(new ANXCurveKey(f11, f12)); - anx.Keys.Add(new ANXCurveKey(f13, f14)); - anx.Keys.Add(new ANXCurveKey(f15, f16)); - - xna.ComputeTangents(xnainout); - anx.ComputeTangents(anxinout); - - AssertHelper.ConvertEquals(Assert.Throws(delegate { xna.ComputeTangent(pos, xnainout, xnainout); }), Assert.Throws(delegate { anx.ComputeTangent(pos, anxinout, anxinout); }), "ComputeTangentE2"); - } - - [TestCaseSource("inoutnotsame")] - public void ComputeTangents(XNACurveTangent xnain, ANXCurveTangent anxin, XNACurveTangent xnaout, ANXCurveTangent anxout, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, float f16) - { - XNACurve xna = new XNACurve(); - ANXCurve anx = new ANXCurve(); - - xna.Keys.Add(new XNACurveKey(f1, f2)); - xna.Keys.Add(new XNACurveKey(f3, f4)); - xna.Keys.Add(new XNACurveKey(f5, f6)); - xna.Keys.Add(new XNACurveKey(f7, f8)); - xna.Keys.Add(new XNACurveKey(f9, f10)); - xna.Keys.Add(new XNACurveKey(f11, f12)); - xna.Keys.Add(new XNACurveKey(f13, f14)); - xna.Keys.Add(new XNACurveKey(f15, f16)); - - anx.Keys.Add(new ANXCurveKey(f1, f2)); - anx.Keys.Add(new ANXCurveKey(f3, f4)); - anx.Keys.Add(new ANXCurveKey(f5, f6)); - anx.Keys.Add(new ANXCurveKey(f7, f8)); - anx.Keys.Add(new ANXCurveKey(f9, f10)); - anx.Keys.Add(new ANXCurveKey(f11, f12)); - anx.Keys.Add(new ANXCurveKey(f13, f14)); - anx.Keys.Add(new ANXCurveKey(f15, f16)); - - xna.ComputeTangents(xnain,xnaout); - anx.ComputeTangents(anxin,anxout); - - AssertHelper.ConvertEquals(xna, anx, "ComputeTangents2"); - } - - [TestCaseSource("Evaluatesamples")] - public void EvaluateFlat(XNACurveLoopType xnapre, XNACurveLoopType xnapost, ANXCurveLoopType anxpre, ANXCurveLoopType anxpost, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, float f16, float pos) - { - XNACurve xna = new XNACurve(); - xna.PreLoop = xnapre; - xna.PostLoop = xnapost; - - ANXCurve anx = new ANXCurve(); - anx.PreLoop = anxpre; - anx.PostLoop = anxpost; - - xna.ComputeTangents(XNACurveTangent.Flat); - anx.ComputeTangents(ANXCurveTangent.Flat); - - xna.Keys.Add(new XNACurveKey(f1, f2)); - xna.Keys.Add(new XNACurveKey(f3, f4)); - xna.Keys.Add(new XNACurveKey(f5, f6)); - xna.Keys.Add(new XNACurveKey(f7, f8)); - xna.Keys.Add(new XNACurveKey(f9, f10)); - xna.Keys.Add(new XNACurveKey(f11, f12)); - xna.Keys.Add(new XNACurveKey(f13, f14)); - xna.Keys.Add(new XNACurveKey(f15, f16)); - - anx.Keys.Add(new ANXCurveKey(f1, f2)); - anx.Keys.Add(new ANXCurveKey(f3, f4)); - anx.Keys.Add(new ANXCurveKey(f5, f6)); - anx.Keys.Add(new ANXCurveKey(f7, f8)); - anx.Keys.Add(new ANXCurveKey(f9, f10)); - anx.Keys.Add(new ANXCurveKey(f11, f12)); - anx.Keys.Add(new ANXCurveKey(f13, f14)); - anx.Keys.Add(new ANXCurveKey(f15, f16)); - - AssertHelper.ConvertEquals(xna.Evaluate(pos), anx.Evaluate(pos), "Evaluate"); - } - - [TestCaseSource("Evaluatesamples")] - public void EvaluateLinear(XNACurveLoopType xnapre, XNACurveLoopType xnapost, ANXCurveLoopType anxpre, ANXCurveLoopType anxpost, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, float f16, float pos) - { - XNACurve xna = new XNACurve(); - xna.PreLoop = xnapre; - xna.PostLoop = xnapost; - - ANXCurve anx = new ANXCurve(); - anx.PreLoop = anxpre; - anx.PostLoop = anxpost; - - xna.ComputeTangents(XNACurveTangent.Linear); - anx.ComputeTangents(ANXCurveTangent.Linear); - - xna.Keys.Add(new XNACurveKey(f1, f2)); - xna.Keys.Add(new XNACurveKey(f3, f4)); - xna.Keys.Add(new XNACurveKey(f5, f6)); - xna.Keys.Add(new XNACurveKey(f7, f8)); - xna.Keys.Add(new XNACurveKey(f9, f10)); - xna.Keys.Add(new XNACurveKey(f11, f12)); - xna.Keys.Add(new XNACurveKey(f13, f14)); - xna.Keys.Add(new XNACurveKey(f15, f16)); - - anx.Keys.Add(new ANXCurveKey(f1, f2)); - anx.Keys.Add(new ANXCurveKey(f3, f4)); - anx.Keys.Add(new ANXCurveKey(f5, f6)); - anx.Keys.Add(new ANXCurveKey(f7, f8)); - anx.Keys.Add(new ANXCurveKey(f9, f10)); - anx.Keys.Add(new ANXCurveKey(f11, f12)); - anx.Keys.Add(new ANXCurveKey(f13, f14)); - anx.Keys.Add(new ANXCurveKey(f15, f16)); - - AssertHelper.ConvertEquals(xna.Evaluate(pos), anx.Evaluate(pos), "Evaluate"); - } - - [TestCaseSource("Evaluatesamples")] - public void EvaluateSmooth(XNACurveLoopType xnapre, XNACurveLoopType xnapost, ANXCurveLoopType anxpre, ANXCurveLoopType anxpost, float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15, float f16, float pos) - { - XNACurve xna = new XNACurve(); - xna.PreLoop = xnapre; - xna.PostLoop = xnapost; - - ANXCurve anx = new ANXCurve(); - anx.PreLoop = anxpre; - anx.PostLoop = anxpost; - - xna.ComputeTangents(XNACurveTangent.Smooth); - anx.ComputeTangents(ANXCurveTangent.Smooth); - - xna.Keys.Add(new XNACurveKey(f1, f2)); - xna.Keys.Add(new XNACurveKey(f3, f4)); - xna.Keys.Add(new XNACurveKey(f5, f6)); - xna.Keys.Add(new XNACurveKey(f7, f8)); - xna.Keys.Add(new XNACurveKey(f9, f10)); - xna.Keys.Add(new XNACurveKey(f11, f12)); - xna.Keys.Add(new XNACurveKey(f13, f14)); - xna.Keys.Add(new XNACurveKey(f15, f16)); - - anx.Keys.Add(new ANXCurveKey(f1, f2)); - anx.Keys.Add(new ANXCurveKey(f3, f4)); - anx.Keys.Add(new ANXCurveKey(f5, f6)); - anx.Keys.Add(new ANXCurveKey(f7, f8)); - anx.Keys.Add(new ANXCurveKey(f9, f10)); - anx.Keys.Add(new ANXCurveKey(f11, f12)); - anx.Keys.Add(new ANXCurveKey(f13, f14)); - anx.Keys.Add(new ANXCurveKey(f15, f16)); - - AssertHelper.ConvertEquals(xna.Evaluate(pos), anx.Evaluate(pos), "Evaluate"); - } - - } -} +#endif \ No newline at end of file diff --git a/ANX.Framework/BoundingBox.cs b/ANX.Framework/BoundingBox.cs index ba3dd843..b7049e36 100644 --- a/ANX.Framework/BoundingBox.cs +++ b/ANX.Framework/BoundingBox.cs @@ -1,6 +1,7 @@ #region Using Statements using System; using System.Collections.Generic; +using ANX.Framework.NonXNA.Development; #endregion // Using Statements @@ -10,6 +11,9 @@ using System.Collections.Generic; namespace ANX.Framework { + [PercentageComplete(100)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct BoundingBox : IEquatable { #region public fields diff --git a/ANX.Framework/BoundingSphere.cs b/ANX.Framework/BoundingSphere.cs index 6a41b0c5..77d50468 100644 --- a/ANX.Framework/BoundingSphere.cs +++ b/ANX.Framework/BoundingSphere.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Globalization; +using ANX.Framework.NonXNA.Development; #endregion // Using Statements @@ -11,6 +12,9 @@ using System.Globalization; namespace ANX.Framework { + [PercentageComplete(100)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct BoundingSphere : IEquatable { #region fields diff --git a/ANX.Framework/Color.cs b/ANX.Framework/Color.cs index 64633be1..1b6a9a6a 100644 --- a/ANX.Framework/Color.cs +++ b/ANX.Framework/Color.cs @@ -1,5 +1,6 @@ using System; using ANX.Framework.Graphics.PackedVector; +using ANX.Framework.NonXNA.Development; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -7,6 +8,9 @@ using ANX.Framework.Graphics.PackedVector; namespace ANX.Framework { + [PercentageComplete(100)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct Color : IPackedVector, IPackedVector, IEquatable { #region Private Members diff --git a/ANX.Framework/ContainmentType.cs b/ANX.Framework/ContainmentType.cs index f003882e..fb7035f0 100644 --- a/ANX.Framework/ContainmentType.cs +++ b/ANX.Framework/ContainmentType.cs @@ -7,6 +7,7 @@ namespace ANX.Framework { [PercentageComplete(100)] + [Developer("Glatzemann")] [TestState(TestStateAttribute.TestState.Tested)] public enum ContainmentType { diff --git a/ANX.Framework/Curve.cs b/ANX.Framework/Curve.cs index cb6f4e2b..a8614a9c 100644 --- a/ANX.Framework/Curve.cs +++ b/ANX.Framework/Curve.cs @@ -1,4 +1,5 @@ using System; +using ANX.Framework.NonXNA.Development; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -6,64 +7,45 @@ using System; namespace ANX.Framework { +#if !WINDOWSMETRO // TODO: find replacement for Win8! + [Serializable] +#endif + [PercentageComplete(100)] + [Developer("floAr")] + [TestState(TestStateAttribute.TestState.InProgress)] public class Curve { - private CurveKeyCollection keys; - private CurveLoopType preLoop; - private CurveLoopType postLoop; + public CurveLoopType PreLoop { get; set; } + public CurveLoopType PostLoop { get; set; } + public CurveKeyCollection Keys { get; private set; } - public CurveLoopType PreLoop + public bool IsConstant { - get { return preLoop; } - set { preLoop = value; } - } - public CurveLoopType PostLoop - { - get { return postLoop; } - set { postLoop = value; } + get { return Keys.Count <= 1; } } - public CurveKeyCollection Keys + public Curve() { - get - { - return keys; - } - } - - public Boolean IsConstant - { - get - { - return this.keys.Count <= 1; - } + Keys = new CurveKeyCollection(); } public Curve Clone() { - Curve result = new Curve(); - result.keys = this.keys.Clone(); - result.preLoop = this.preLoop; - result.postLoop = this.postLoop; - return result; - } - public Curve() - { - this.keys = new CurveKeyCollection(); + return new Curve { Keys = Keys.Clone(), PreLoop = PreLoop, PostLoop = PostLoop }; } - #region tangent calculation + #region ComputeTangent //formulas from: http://msdn.microsoft.com/de-de/library/microsoft.xna.framework.curvetangent%28v=xnagamestudio.40%29.aspx - public void ComputeTangent(Int32 index, CurveTangent tangentInOutType) + public void ComputeTangent(int index, CurveTangent tangentInOutType) { - if (index < 0 || index >= keys.Count) + if (index < 0 || index >= Keys.Count) { throw new ArgumentOutOfRangeException(); } - CurveKey prev = index > 0 ? this.keys[index - 1] : this.keys[index]; - CurveKey current = this.keys[index]; + CurveKey prev = index > 0 ? this.Keys[index - 1] : this.Keys[index]; + CurveKey current = this.Keys[index]; current.TangentIn = 0; - CurveKey next = index < this.keys.Count - 1 ? this.keys[index + 1] : this.keys[index]; + CurveKey next = index < this.Keys.Count - 1 ? this.Keys[index + 1] : this.Keys[index]; switch (tangentInOutType) @@ -82,17 +64,18 @@ namespace ANX.Framework break; } } - public void ComputeTangent(Int32 index, CurveTangent tangentInType, CurveTangent tangentOutType) + + public void ComputeTangent(int index, CurveTangent tangentInType, CurveTangent tangentOutType) { - if (index < 0 || index >= keys.Count) + if (index < 0 || index >= Keys.Count) { throw new ArgumentOutOfRangeException(); } - CurveKey prev = index > 0 ? this.keys[index - 1] : this.keys[index]; - CurveKey current = this.keys[index]; + CurveKey prev = index > 0 ? this.Keys[index - 1] : this.Keys[index]; + CurveKey current = this.Keys[index]; current.TangentIn = 0; - CurveKey next = index < this.keys.Count - 1 ? this.keys[index + 1] : this.keys[index]; + CurveKey next = index < this.Keys.Count - 1 ? this.Keys[index + 1] : this.Keys[index]; switch (tangentInType) @@ -121,165 +104,169 @@ namespace ANX.Framework } } + public void ComputeTangents(CurveTangent tangentInOutType) { - for (int i = 0; i < this.keys.Count; ++i) + for (int i = 0; i < this.Keys.Count; ++i) { this.ComputeTangent(i, tangentInOutType); } } + public void ComputeTangents(CurveTangent tangentInType, CurveTangent tangentOutType) { - for (int i = 0; i < this.keys.Count; ++i) + for (int i = 0; i < this.Keys.Count; ++i) { this.ComputeTangent(i, tangentInType, tangentOutType); } } - #endregion - public Single Evaluate(Single position) + public float Evaluate(float position) + { + if (Keys.Count == 0) + return 0f; + + if (Keys.Count == 1) + return Keys[0].Value; + + CurveKey firstPointOfCurve = Keys[0]; + CurveKey lastPointOfCurve = Keys[Keys.Count - 1]; + + if (position < firstPointOfCurve.Position) + return EvalualtePreLoop(firstPointOfCurve, lastPointOfCurve, position); + + if (position > lastPointOfCurve.Position) + return EvalualtePostLoop(firstPointOfCurve, lastPointOfCurve, position); + + return Interpolate(position); + } + + #region EvalualtePreLoop + private float EvalualtePreLoop(CurveKey first, CurveKey last, float position) + { + int wraps; + float firstPosition = first.Position; + float lastPosition = last.Position; + // tspan is min 1 to avoid deadlock at constant curves + float timeSpan = Math.Max(1, lastPosition - firstPosition); + + // Description from : http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.curvelooptype.aspx + switch (PreLoop) + { + case CurveLoopType.Constant: + // The Curve will evaluate to its first key for positions before the first point in the Curve and to + // the last key for positions after the last point. + return first.Value; + + case CurveLoopType.Linear: + // Linear interpolation will be performed to determine the value. + return first.Value - first.TangentIn * (first.Position - position); + + case CurveLoopType.Cycle: + // Positions specified past the ends of the curve will wrap around to the opposite side of the Curve. + position -= timeSpan * CountWraps(position); + return Interpolate(position); + + case CurveLoopType.CycleOffset: + // Positions specified past the ends of the curv will wrap around to the opposite side of the Curve. + // The value will be offset by the difference between the values of the first and last CurveKey + // multiplied by the number of times the position wraps around. If the position is before the first + // point in the Curve, the difference will be subtracted from its value; otherwise, the difference + // will be added + wraps = CountWraps(position); + float difference = (last.Value - first.Value) * wraps; + position -= timeSpan * CountWraps(position); + return Interpolate(position) + difference; + + case CurveLoopType.Oscillate: + // Positions specified past the ends of the Curve act as an offset from the same side of the Curve + // toward the opposite side. + wraps = CountWraps(position); + float offset = position - (first.Position + wraps * timeSpan); + float wrappedPosition = (wraps & 1) != 0 ? (last.Position - offset) : (first.Position + offset); + return Interpolate(wrappedPosition); + } + + return Interpolate(position); + } + #endregion + + #region EvalualtePostLoop + private float EvalualtePostLoop(CurveKey first, CurveKey last, float position) { int wraps; - //Get first and last Point - CurveKey first = keys[0]; float firstPosition = first.Position; - CurveKey last = keys[keys.Count - 1]; float lastPosition = last.Position; //tspan is min 1 to avoid deadlock at constant curves float timeSpan = Math.Max(1, lastPosition - firstPosition); - //wanted point before first point - if (position < first.Position) + + switch (PostLoop) { - // Description from : http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.curvelooptype.aspx - switch (this.PreLoop) - { - case CurveLoopType.Constant: - //The Curve will evaluate to its first key for positions before the first point in the Curve and to the last key for positions after the last point. - return first.Value; + case CurveLoopType.Constant: + // The Curve will evaluate to its first key for positions before the first point in the Curve and to + // the last key for positions after the last point. + return last.Value; - case CurveLoopType.Linear: - // Linear interpolation will be performed to determine the value. - return first.Value - first.TangentIn * (first.Position - position); + case CurveLoopType.Linear: + // Linear interpolation will be performed to determine the value. + return last.Value - last.TangentOut * (last.Position - position); - case CurveLoopType.Cycle: - // Positions specified past the ends of the curve will wrap around to the opposite side of the Curve. + case CurveLoopType.Cycle: + // Positions specified past the ends of the curve will wrap around to the opposite side of the Curve. + position -= timeSpan * CountWraps(position); + return Interpolate(position); + case CurveLoopType.CycleOffset: + // Positions specified past the ends of the curve will wrap around to the opposite side of the Curve. + // The value will be offset by the difference between the values of the first and last CurveKey + // multiplied by the number of times the position wraps around. If the position is before the first + // point in the Curve, the difference will be subtracted from its value; otherwise, the difference + // will be added. + wraps = CountWraps(position); + float difference = (last.Value - first.Value) * wraps; + position -= timeSpan * CountWraps(position); + return Interpolate(position) + difference; - position -= timeSpan * countWraps(position); - - return this.interpolate((position)); - - - - case CurveLoopType.CycleOffset: - //Positions specified past the ends of the curv will wrap around to the opposite side of the Curve. - //The value will be offset by the difference between the values of the first and last CurveKey - //multiplied by the number of times the position wraps around. If the position is before the first - //point in the Curve, the difference will be subtracted from its value; otherwise, the difference - //will be added - wraps = countWraps(position); - float difference = (this.keys[this.keys.Count - 1].Value - this.keys[0].Value) * wraps; - - position -= timeSpan * countWraps(position); - - return this.interpolate(position) + difference; - - case CurveLoopType.Oscillate: - //Positions specified past the ends of the Curve act as an offset from the same side of the Curve - //toward the opposite side. - wraps = -countWraps(position); - - if (wraps % 2 == 1) - { - return this.interpolate(lastPosition - position + firstPosition - (wraps * timeSpan)); - } - return this.interpolate(position + (wraps * timeSpan)); - } - } - //wanted point behind last point - else if (position > last.Position) - { - switch (this.PostLoop) - { - case CurveLoopType.Constant: - //The Curve will evaluate to its first key for positions before the first point in the Curve and to - //the last key for positions after the last point. - return last.Value; - - case CurveLoopType.Linear: - //Linear interpolation will be performed to determine the value. - return last.Value + last.TangentOut * (position - last.Position); - - case CurveLoopType.Cycle: - // Positions specified past the ends of the curve will wrap around to the opposite side of the Curve. - position -= timeSpan * countWraps(position); - - return this.interpolate((position)); - - - - case CurveLoopType.CycleOffset: - //Positions specified past the ends of the curve will wrap around to the opposite side of the Curve. - //The value will be offset by the difference between the values of the first and last CurveKey - //multiplied by the number of times the position wraps around. If the position is before the first - //point in the Curve, the difference will be subtracted from its value; otherwise, the difference - //will be added. - wraps = countWraps(position); - float difference = (this.keys[this.keys.Count - 1].Value - this.keys[0].Value) * wraps; - - position -= timeSpan * countWraps(position); - - return this.interpolate(position) + difference; - - case CurveLoopType.Oscillate: - //Positions specified past the ends of the Curve act as an offset from the same side of the Curve - //toward the opposite side. - wraps = -countWraps(position); - position += timeSpan * wraps; - if (wraps % 2 == 1) - { - return this.interpolate(lastPosition - position + firstPosition - (wraps * timeSpan)); - } - return this.interpolate(position + (wraps * timeSpan)); - } + case CurveLoopType.Oscillate: + // Positions specified past the ends of the Curve act as an offset from the same side of the Curve + // toward the opposite side. + wraps = CountWraps(position); + float offset = position - (first.Position + wraps * timeSpan); + float wrappedPosition = (wraps & 1) != 0 ? (last.Position - offset) : (first.Position + offset); + return Interpolate(wrappedPosition); } - //in curve - return interpolate(position); - + return Interpolate(position); } - private int countWraps(float position) + #endregion + + private int CountWraps(float position) { - float wraps = (position - keys[0].Position) / (keys[keys.Count - 1].Position - keys[0].Position); - if (wraps < 0) wraps--; + float timeRange = Keys[Keys.Count - 1].Position - Keys[0].Position; + float wraps = (position - Keys[0].Position) / timeRange; + if (wraps < 0) + wraps--; + return (int)wraps; } - private float interpolate(float position) + private float Interpolate(float position) { - //interpolate inside the curve with cubic hermite: - http://forums.create.msdn.com/forums/p/53392/323814.aspx - + //interpolate inside the curve with cubic hermite: http://forums.create.msdn.com/forums/p/53392/323814.aspx //assume position is inside curve - CurveKey a = this.keys[0]; + CurveKey a = Keys[0]; CurveKey b; - for (int i = 1; i < this.keys.Count; ++i) + for (int nextKeyIndex = 1; nextKeyIndex < Keys.Count; nextKeyIndex++) { - b = this.Keys[i]; + b = Keys[nextKeyIndex]; if (b.Position >= position) { //stepping if (a.Continuity == CurveContinuity.Step) - { - if (position == b.Position) - { - return b.Position; - } - return a.Value; + return position == b.Position ? b.Value : a.Value; - } //smooth //get the location between a and b in [0,1] float moment = (position - a.Position) / (b.Position - a.Position); @@ -291,6 +278,5 @@ namespace ANX.Framework } return 0f; } - } } diff --git a/ANX.Framework/CurveKeyCollection.cs b/ANX.Framework/CurveKeyCollection.cs index 3033d38f..2180d2b3 100644 --- a/ANX.Framework/CurveKeyCollection.cs +++ b/ANX.Framework/CurveKeyCollection.cs @@ -1,6 +1,7 @@ using System; using System.Collections; using System.Collections.Generic; +using ANX.Framework.NonXNA.Development; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -8,8 +9,10 @@ using System.Collections.Generic; namespace ANX.Framework { - public class CurveKeyCollection : ICollection, - IEnumerable, IEnumerable + [PercentageComplete(100)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] + public class CurveKeyCollection : ICollection, IEnumerable, IEnumerable { #region Private private List keys; diff --git a/ANX.Framework/GameHost.cs b/ANX.Framework/GameHost.cs index 19f78a88..45893075 100644 --- a/ANX.Framework/GameHost.cs +++ b/ANX.Framework/GameHost.cs @@ -11,6 +11,7 @@ using ANX.Framework.NonXNA.Development; namespace ANX.Framework { [Developer("Glatzemann")] + [TestState(TestStateAttribute.TestState.Untested)] public abstract class GameHost { internal event EventHandler Activated; diff --git a/ANX.Framework/GameWindow.cs b/ANX.Framework/GameWindow.cs index ea3bd2e7..6aed3931 100644 --- a/ANX.Framework/GameWindow.cs +++ b/ANX.Framework/GameWindow.cs @@ -11,6 +11,7 @@ using ANX.Framework.NonXNA.Development; namespace ANX.Framework { [Developer("Glatzemann")] + [TestState(TestStateAttribute.TestState.Untested)] public abstract class GameWindow { #region Private diff --git a/ANX.Framework/GraphicsDeviceManager.cs b/ANX.Framework/GraphicsDeviceManager.cs index da2f9b58..2a3e3b2e 100644 --- a/ANX.Framework/GraphicsDeviceManager.cs +++ b/ANX.Framework/GraphicsDeviceManager.cs @@ -15,6 +15,7 @@ using ANX.Framework.NonXNA.Development; namespace ANX.Framework { [Developer("Glatzemann")] + [TestState(TestStateAttribute.TestState.Untested)] public class GraphicsDeviceManager : IGraphicsDeviceManager, IDisposable, IGraphicsDeviceService { #region Constants diff --git a/ANX.Framework/Input/MotionSensing/MotionSensingDevice.cs b/ANX.Framework/Input/MotionSensing/MotionSensingDevice.cs index 3a7955bc..8fded88f 100644 --- a/ANX.Framework/Input/MotionSensing/MotionSensingDevice.cs +++ b/ANX.Framework/Input/MotionSensing/MotionSensingDevice.cs @@ -2,6 +2,7 @@ using System; using ANX.Framework.NonXNA; using ANX.Framework.Graphics; +using ANX.Framework.NonXNA.Development; #endregion // Using Statements @@ -13,7 +14,9 @@ using ANX.Framework.Graphics; namespace ANX.Framework.Input.MotionSensing { - public class MotionSensingDevice + [PercentageComplete(100)] + [TestState(TestStateAttribute.TestState.Untested)] + public static class MotionSensingDevice { private static readonly IMotionSensingDevice motionSensingDevice; @@ -30,7 +33,8 @@ namespace ANX.Framework.Input.MotionSensing static MotionSensingDevice() { - motionSensingDevice = AddInSystemFactory.Instance.GetDefaultCreator().MotionSensingDevice; + var creator = AddInSystemFactory.Instance.GetDefaultCreator(); + motionSensingDevice = creator.MotionSensingDevice; } public static MotionSensingDeviceState GetState() diff --git a/ANX.Framework/Input/MotionSensing/MotionSensingDeviceState.cs b/ANX.Framework/Input/MotionSensing/MotionSensingDeviceState.cs index 338606a0..41b7cad0 100644 --- a/ANX.Framework/Input/MotionSensing/MotionSensingDeviceState.cs +++ b/ANX.Framework/Input/MotionSensing/MotionSensingDeviceState.cs @@ -1,6 +1,7 @@ #region Using Statements using System; using ANX.Framework.Graphics; +using ANX.Framework.NonXNA.Development; #endregion // Using Statements @@ -11,41 +12,40 @@ using ANX.Framework.Graphics; #if XNAEXT namespace ANX.Framework.Input.MotionSensing { + [PercentageComplete(100)] + [TestState(TestStateAttribute.TestState.Untested)] public struct MotionSensingDeviceState { - private bool connected; + private readonly bool connected; - private Texture2D pRGB; - private Texture2D pDepth; + private readonly Texture2D pRGB; + private readonly Texture2D pDepth; - private Vector3 pHipCenter; - private Vector3 pSpine; - private Vector3 pShoulderCenter; - private Vector3 pHead; - private Vector3 pShoulderLeft; - private Vector3 pElbowLeft; - private Vector3 pWristLeft; - private Vector3 pHandLeft; - private Vector3 pShoulderRight; - private Vector3 pElbowRight; - private Vector3 pWristRight; - private Vector3 pHandRight; - private Vector3 pHipLeft; - private Vector3 pKneeLeft; - private Vector3 pAnkleLeft; - private Vector3 pFootLeft; - private Vector3 pHipRight; - private Vector3 pKneeRight; - private Vector3 pAnkleRight; - private Vector3 pFootRight; - private Vector3 pCount; + private readonly Vector3 pHipCenter; + private readonly Vector3 pSpine; + private readonly Vector3 pShoulderCenter; + private readonly Vector3 pHead; + private readonly Vector3 pShoulderLeft; + private readonly Vector3 pElbowLeft; + private readonly Vector3 pWristLeft; + private readonly Vector3 pHandLeft; + private readonly Vector3 pShoulderRight; + private readonly Vector3 pElbowRight; + private readonly Vector3 pWristRight; + private readonly Vector3 pHandRight; + private readonly Vector3 pHipLeft; + private readonly Vector3 pKneeLeft; + private readonly Vector3 pAnkleLeft; + private readonly Vector3 pFootLeft; + private readonly Vector3 pHipRight; + private readonly Vector3 pKneeRight; + private readonly Vector3 pAnkleRight; + private readonly Vector3 pFootRight; + private readonly Vector3 pCount; public bool Connected { - get - { - return this.connected; - } + get { return this.connected; } } public Texture2D RGB { get { return this.pRGB; } } @@ -73,37 +73,39 @@ namespace ANX.Framework.Input.MotionSensing public Vector3 FootRight { get { return this.pFootRight; } } public Vector3 Count { get { return this.pCount; } } - public MotionSensingDeviceState(bool connected, Texture2D _RGB, Texture2D _Depth, Vector3 _HipCenter, Vector3 _Spine, Vector3 _ShoulderCenter, Vector3 _Head, Vector3 _ShoulderLeft, - Vector3 _ElbowLeft, Vector3 _WristLeft, Vector3 _HandLeft, Vector3 _ShoulderRight, Vector3 _ElbowRight, Vector3 _WristRight, Vector3 _HandRight, Vector3 _HipLeft, Vector3 _KneeLeft, Vector3 _AnkleLeft, Vector3 _FootLeft, Vector3 _HipRight, Vector3 _KneeRight, Vector3 _AnkleRight, Vector3 _FootRight, Vector3 _Count) + public MotionSensingDeviceState(bool connected, Texture2D rgbTexture, Texture2D depthTe, Vector3 hipCenter, + Vector3 spine, Vector3 shoulderCenter, Vector3 head, Vector3 shoulderLeft, Vector3 elbowLeft, Vector3 wristLeft, + Vector3 handLeft, Vector3 shoulderRight, Vector3 elbowRight, Vector3 wristRight, Vector3 handRight, + Vector3 hipLeft, Vector3 kneeLeft, Vector3 ankleLeft, Vector3 footLeft, Vector3 hipRight, Vector3 kneeRight, + Vector3 ankleRight, Vector3 footRight, Vector3 count) { this.connected = connected; - pRGB = _RGB; - pDepth = _Depth; + pRGB = rgbTexture; + pDepth = depthTe; - pHipCenter = _HipCenter; - pSpine = _Spine; - pShoulderCenter = _ShoulderCenter; - pHead = _Head; - pShoulderLeft = _ShoulderLeft; - pElbowLeft=_ElbowLeft; - pWristLeft=_WristLeft; - pHandLeft=_HandLeft; - pShoulderRight=_ShoulderRight; - pElbowRight=_ElbowRight; - pWristRight=_WristRight; - pHandRight=_HandRight; - pHipLeft=_HipLeft; - pKneeLeft=_KneeLeft; - pAnkleLeft=_AnkleLeft; - pFootLeft=_FootLeft; - pHipRight=_HipRight; - pKneeRight=_KneeRight; - pAnkleRight=_AnkleRight; - pFootRight=_FootRight; - pCount=_Count; + pHipCenter = hipCenter; + pSpine = spine; + pShoulderCenter = shoulderCenter; + pHead = head; + pShoulderLeft = shoulderLeft; + pElbowLeft = elbowLeft; + pWristLeft = wristLeft; + pHandLeft = handLeft; + pShoulderRight = shoulderRight; + pElbowRight = elbowRight; + pWristRight = wristRight; + pHandRight = handRight; + pHipLeft = hipLeft; + pKneeLeft = kneeLeft; + pAnkleLeft = ankleLeft; + pFootLeft = footLeft; + pHipRight = hipRight; + pKneeRight = kneeRight; + pAnkleRight = ankleRight; + pFootRight = footRight; + pCount = count; } - } } diff --git a/ANX.Framework/Input/MotionSensing/MotionSensingDeviceType.cs b/ANX.Framework/Input/MotionSensing/MotionSensingDeviceType.cs index 86b79284..7300deaa 100644 --- a/ANX.Framework/Input/MotionSensing/MotionSensingDeviceType.cs +++ b/ANX.Framework/Input/MotionSensing/MotionSensingDeviceType.cs @@ -1,3 +1,5 @@ +using ANX.Framework.NonXNA.Development; + // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. // For details see: http://anxframework.codeplex.com/license @@ -5,6 +7,8 @@ #if XNAEXT namespace ANX.Framework.Input.MotionSensing { + [PercentageComplete(100)] + [TestState(TestStateAttribute.TestState.Tested)] public enum MotionSensingDeviceType { Kinect, diff --git a/ANX.Framework/Matrix.cs b/ANX.Framework/Matrix.cs index 3ee1abd3..0ce358fe 100644 --- a/ANX.Framework/Matrix.cs +++ b/ANX.Framework/Matrix.cs @@ -1,6 +1,7 @@ #region Using Statements using System; using System.Globalization; +using ANX.Framework.NonXNA.Development; #endregion // Using Statements @@ -10,6 +11,9 @@ using System.Globalization; namespace ANX.Framework { + [PercentageComplete(70)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct Matrix : IEquatable { #region Public Fields diff --git a/ANX.Framework/Plane.cs b/ANX.Framework/Plane.cs index 4a452f94..c1f46d89 100644 --- a/ANX.Framework/Plane.cs +++ b/ANX.Framework/Plane.cs @@ -1,6 +1,7 @@ #region Using Statements using System; using System.Globalization; +using ANX.Framework.NonXNA.Development; #endregion // Using Statements @@ -10,6 +11,9 @@ using System.Globalization; namespace ANX.Framework { + [PercentageComplete(100)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct Plane : IEquatable { #region fields @@ -17,7 +21,6 @@ namespace ANX.Framework public Vector3 Normal; #endregion - #region constructors public Plane(float a, float b, float c, float d) { @@ -43,7 +46,6 @@ namespace ANX.Framework } #endregion - #region public methods public float Dot(Vector4 value) { @@ -343,7 +345,6 @@ namespace ANX.Framework } #endregion - #region IEquatable implementation public override bool Equals(Object obj) { @@ -356,7 +357,6 @@ namespace ANX.Framework } #endregion - #region operator overloading public static bool operator ==(Plane lhs, Plane rhs) { diff --git a/ANX.Framework/Point.cs b/ANX.Framework/Point.cs index ba0722fe..000127d3 100644 --- a/ANX.Framework/Point.cs +++ b/ANX.Framework/Point.cs @@ -8,9 +8,9 @@ using ANX.Framework.NonXNA.Development; namespace ANX.Framework { - [PercentageComplete(100)] - [TestState(TestStateAttribute.TestState.Untested)] + [PercentageComplete(100)] [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct Point : IEquatable { #region Constants diff --git a/ANX.Framework/Quaternion.cs b/ANX.Framework/Quaternion.cs index f829b045..767a0ef3 100644 --- a/ANX.Framework/Quaternion.cs +++ b/ANX.Framework/Quaternion.cs @@ -1,6 +1,8 @@ #region Using Statements using System; using System.Globalization; +using ANX.Framework.NonXNA.Development; + #endregion // Using Statements // This file is part of the ANX.Framework created by the @@ -9,6 +11,9 @@ using System.Globalization; namespace ANX.Framework { + [PercentageComplete(100)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct Quaternion : IEquatable { #region fields @@ -418,7 +423,7 @@ namespace ANX.Framework #region IEquatable implementation public override bool Equals(Object obj) { - return (obj is Quaternion) ? this.Equals((Quaternion)obj) : false; + return (obj is Quaternion) && this.Equals((Quaternion)obj); } public bool Equals(Quaternion other) { diff --git a/ANX.Framework/Ray.cs b/ANX.Framework/Ray.cs index 1e30d081..422fda6f 100644 --- a/ANX.Framework/Ray.cs +++ b/ANX.Framework/Ray.cs @@ -1,4 +1,5 @@ using System; +using ANX.Framework.NonXNA.Development; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -6,6 +7,9 @@ using System; namespace ANX.Framework { + [PercentageComplete(100)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct Ray : IEquatable { #region fields @@ -20,7 +24,6 @@ namespace ANX.Framework public Vector3 Position; #endregion - #region constructors /// /// Initializes a new instance of the struct. @@ -34,7 +37,6 @@ namespace ANX.Framework } #endregion - #region public methods /// /// Returns a hash code for this instance. @@ -179,7 +181,6 @@ namespace ANX.Framework } #endregion - #region operator overloading /// /// Implements the operator ==. @@ -207,7 +208,6 @@ namespace ANX.Framework } #endregion - #region IEquatable implementation /// /// Determines whether the specified is equal to this instance. diff --git a/ANX.Framework/Rectangle.cs b/ANX.Framework/Rectangle.cs index aba19283..ebd1462f 100644 --- a/ANX.Framework/Rectangle.cs +++ b/ANX.Framework/Rectangle.cs @@ -1,5 +1,6 @@ using System; using System.Globalization; +using ANX.Framework.NonXNA.Development; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -7,6 +8,9 @@ using System.Globalization; namespace ANX.Framework { + [PercentageComplete(100)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct Rectangle : IEquatable { #region fields diff --git a/ANX.Framework/Vector2.cs b/ANX.Framework/Vector2.cs index 86522693..7d5680f1 100644 --- a/ANX.Framework/Vector2.cs +++ b/ANX.Framework/Vector2.cs @@ -1,5 +1,6 @@ using System; using System.Globalization; +using ANX.Framework.NonXNA.Development; // This file is part of the ANX.Framework created by the // "ANX.Framework developer group" and released under the Ms-PL license. @@ -7,6 +8,9 @@ using System.Globalization; namespace ANX.Framework { + [PercentageComplete(100)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct Vector2 : IEquatable { #region fields diff --git a/ANX.Framework/Vector3.cs b/ANX.Framework/Vector3.cs index 5ea9bf9f..8a43bcca 100644 --- a/ANX.Framework/Vector3.cs +++ b/ANX.Framework/Vector3.cs @@ -1,6 +1,7 @@ #region Using Statements using System; using System.Globalization; +using ANX.Framework.NonXNA.Development; #endregion // Using Statements @@ -10,6 +11,9 @@ using System.Globalization; namespace ANX.Framework { + [PercentageComplete(100)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct Vector3 : IEquatable { #region Private Static Fields diff --git a/ANX.Framework/Vector4.cs b/ANX.Framework/Vector4.cs index 017cb49a..ac60eb02 100644 --- a/ANX.Framework/Vector4.cs +++ b/ANX.Framework/Vector4.cs @@ -1,6 +1,7 @@ #region Using Statements using System; using System.Globalization; +using ANX.Framework.NonXNA.Development; #endregion // Using Statements @@ -10,6 +11,9 @@ using System.Globalization; namespace ANX.Framework { + [PercentageComplete(100)] + [Developer("???")] + [TestState(TestStateAttribute.TestState.InProgress)] public struct Vector4 : IEquatable { #region Fields @@ -625,7 +629,7 @@ namespace ANX.Framework public override bool Equals(Object obj) { - return (obj is Vector4) ? this.Equals((Vector4)obj) : false; + return (obj is Vector4) && this.Equals((Vector4)obj); }