public void CreatePose_ExtractsCorrectPose(int frame, int expectedFrame)
 {
     using (var pose = ClipTransformations.CreatePose(FullAnimationClip, frame))
     {
         Assert.That(pose.Value.SampleRate, Is.EqualTo(FullAnimationClip.Value.SampleRate));
         Assert.That(pose.Value.Duration, Is.EqualTo(0));
         Assert.That(pose.Value.Bindings.CurveCount, Is.EqualTo(FullAnimationClip.Value.Bindings.CurveCount));
         Assert.That(pose.Value.Samples.Length, Is.EqualTo(FullAnimationClip.Value.Bindings.CurveCount));
         Assert.That(AreEqual(ref pose.Value.Bindings.TranslationBindings, ref FullAnimationClip.Value.Bindings.TranslationBindings));
         Assert.That(AreEqual(ref pose.Value.Samples, ref FullAnimationClip.Value.Samples, expectedFrame * pose.Value.Bindings.CurveCount));
     }
 }
 public void Clone_CreatesExactDuplicate()
 {
     using (var clone = ClipTransformations.Clone(FullAnimationClip))
     {
         Assert.That(clone.Value.SampleRate, Is.EqualTo(FullAnimationClip.Value.SampleRate));
         Assert.That(clone.Value.Duration, Is.EqualTo(FullAnimationClip.Value.Duration));
         Assert.That(clone.Value.Bindings.CurveCount, Is.EqualTo(FullAnimationClip.Value.Bindings.CurveCount));
         Assert.That(AreEqual(ref clone.Value.Bindings.TranslationBindings, ref FullAnimationClip.Value.Bindings.TranslationBindings));
         Assert.That(AreEqual(ref clone.Value.Bindings.RotationBindings, ref FullAnimationClip.Value.Bindings.RotationBindings));
         Assert.That(AreEqual(ref clone.Value.Bindings.ScaleBindings, ref FullAnimationClip.Value.Bindings.ScaleBindings));
         Assert.That(AreEqual(ref clone.Value.Bindings.FloatBindings, ref FullAnimationClip.Value.Bindings.FloatBindings));
         Assert.That(AreEqual(ref clone.Value.Bindings.IntBindings, ref FullAnimationClip.Value.Bindings.IntBindings));
         Assert.That(AreEqual(ref clone.Value.Samples, ref FullAnimationClip.Value.Samples));
     }
 }
        private void Reverse_InversesClipEvaluation(BlobAssetReference <Clip> clip)
        {
            var evaluationTimes = Enumerable.Range(0, clip.Value.FrameCount + 1).Select(x => x / clip.Value.SampleRate).ToArray();
            var reverseTimes    = evaluationTimes.Select(x => clip.Value.Duration - x).ToArray();

            using (var reverseClip = ClipTransformations.Reverse(clip))
            {
                Assert.That(reverseClip.Value.SampleRate, Is.EqualTo(clip.Value.SampleRate));
                Assert.That(reverseClip.Value.Duration, Is.EqualTo(clip.Value.Duration));
                Assert.That(reverseClip.Value.Bindings.CurveCount, Is.EqualTo(clip.Value.Bindings.CurveCount));
                Assert.That(AreEqual(ref reverseClip.Value.Bindings.TranslationBindings, ref clip.Value.Bindings.TranslationBindings));
                Assert.That(AreEqual(ref reverseClip.Value.Bindings.RotationBindings, ref clip.Value.Bindings.RotationBindings));
                Assert.That(AreEqual(ref reverseClip.Value.Bindings.ScaleBindings, ref clip.Value.Bindings.ScaleBindings));

                // Evaluate
                for (var bone = 0; bone < clip.Value.Bindings.TranslationBindings.Length; bone++)
                {
                    EvaluateClip(clip, bone, reverseTimes, out float3[] expPos, out quaternion[] expRot, out float3[] expScale);