Skip to content

Commit 5cfadd8

Browse files
committed
fix continous rotation test failing for equivalent rotations
1 parent a9ce452 commit 5cfadd8

File tree

1 file changed

+40
-11
lines changed

1 file changed

+40
-11
lines changed

com.unity.formats.fbx/Tests/FbxTests/FbxAnimationTest.cs

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -416,6 +416,9 @@ public int Main (KeyData keyData, string testName, string path)
416416
bool hasQuatBinding =
417417
MapEulerToQuaternionPropertyName.TryGetValue (propertyBinding, out propertyBinding);
418418

419+
bool isRotation = AnimationTestDataClass.m_rotationEulerNames.Contains(curveBinding.propertyName) ||
420+
AnimationTestDataClass.m_rotationQuaternionNames.Contains(curveBinding.propertyName);
421+
419422
if (id==-1)
420423
id = keyData.GetIndexOf (propertyBinding);
421424

@@ -439,13 +442,13 @@ public int Main (KeyData keyData, string testName, string path)
439442
else
440443
{
441444
// compare by sampled keyvalues against original keydata
442-
KeyValuesTest (keyData.keyTimes, keyData.GetAltKeyValues (id), animCurveImported, curveBinding.propertyName);
445+
KeyValuesTest (keyData.keyTimes, keyData.GetAltKeyValues (id), animCurveImported, curveBinding.propertyName, isRotation);
443446
}
444447
}
445448
else
446449
{
447450
// compare by sampled keyvalues against original animCurve
448-
KeyValuesTest (animCurvesOriginal[id], animCurveImported, curveBinding.propertyName);
451+
KeyValuesTest (animCurvesOriginal[id], animCurveImported, curveBinding.propertyName, isRotation);
449452
}
450453
result++;
451454
}
@@ -497,14 +500,18 @@ public static void ClipTest(AnimationClip animClipOriginal, AnimationClip animCl
497500
continue;
498501
}
499502

503+
bool isRotation = AnimationTestDataClass.m_rotationEulerNames.Contains(curveBinding.propertyName) ||
504+
AnimationTestDataClass.m_rotationQuaternionNames.Contains(curveBinding.propertyName);
505+
500506
AnimationCurve animCurveOrig = AnimationUtility.GetEditorCurve (animClipOriginal, curveBinding);
501507
Assert.That (animCurveOrig, Is.Not.Null);
502508

503509
AnimationCurve animCurveImported = AnimationUtility.GetEditorCurve (animClipImported, impCurveBinding);
504510
Assert.That (animCurveImported, Is.Not.Null);
505511

506512
AnimTester.KeyValuesTest(animCurveImported, animCurveOrig,
507-
string.Format("path: {0}, property: {1}", curveBinding.path, curveBinding.propertyName));
513+
string.Format("path: {0}, property: {1}", curveBinding.path, curveBinding.propertyName),
514+
isRotation);
508515
}
509516
}
510517
}
@@ -545,7 +552,7 @@ public static void KeysTest (float [] expectedKeyTimes, float [] expectedKeyValu
545552
return ;
546553
}
547554

548-
public static void KeyValuesTest (float [] expectedKeyTimes, float [] expectedKeyValues, AnimationCurve actualAnimCurve, string message)
555+
public static void KeyValuesTest (float [] expectedKeyTimes, float [] expectedKeyValues, AnimationCurve actualAnimCurve, string message, bool isRotationCurve = false)
549556
{
550557
for (var i=0; i < expectedKeyTimes.Length; ++i)
551558
{
@@ -554,23 +561,45 @@ public static void KeyValuesTest (float [] expectedKeyTimes, float [] expectedKe
554561

555562
float actualKeyValue = actualAnimCurve.Evaluate(expectedKeyTime);
556563

557-
#if DEBUG_UNITTEST
564+
#if DEBUG_UNITTEST
558565
Debug.Log(string.Format("key time={0} expected={1} actual={2} delta={3}", expectedKeyTime.ToString(), expectedKeyValue.ToString(), actualKeyValue.ToString(), Mathf.Abs(expectedKeyValue-actualKeyValue).ToString()));
559-
#endif
560-
Assert.That(expectedKeyValue, Is.EqualTo(actualKeyValue).Within(0.0001), string.Format("{0} key ({1}) doesn't match", message, expectedKeyTime));
566+
#endif
567+
// also handles values that are equal but different signs (i.e. -90 == 270)
568+
if (isRotationCurve)
569+
{
570+
var expectedQuat = Quaternion.Euler(new Vector3(expectedKeyValue, 0, 0));
571+
var actualQuat = Quaternion.Euler(new Vector3(actualKeyValue, 0, 0));
572+
Assert.That(Quaternion.Angle(expectedQuat, actualQuat), Is.LessThan(0.1), string.Format("{0} key ({1}) doesn't match", message, expectedKeyTime));
573+
}
574+
else
575+
{
576+
Assert.That(expectedKeyValue, Is.EqualTo(actualKeyValue).Within(0.0001), string.Format("{0} key ({1}) doesn't match", message, expectedKeyTime));
577+
}
561578
}
562579
}
563580

564-
public static void KeyValuesTest (AnimationCurve expectedAnimCurve, AnimationCurve actualAnimCurve, string message)
581+
public static void KeyValuesTest (AnimationCurve expectedAnimCurve, AnimationCurve actualAnimCurve, string message, bool isRotationCurve = false)
565582
{
566583
foreach (var key in expectedAnimCurve.keys)
567584
{
568585
float actualKeyValue = actualAnimCurve.Evaluate(key.time);
569586

570-
#if DEBUG_UNITTEST
587+
#if DEBUG_UNITTEST
571588
Debug.Log(string.Format("key time={0} actual={1} expected={2} delta={3}", key.time.ToString(), key.value.ToString(), actualKeyValue.ToString(), Mathf.Abs(key.value-actualKeyValue).ToString()));
572-
#endif
573-
Assert.That(key.value, Is.EqualTo(actualKeyValue).Within(0.1), string.Format("{0} key ({1}) doesn't match", message, key.time));
589+
#endif
590+
var expectedKeyValue = key.value;
591+
592+
// also handles values that are equal but different signs (i.e. -90 == 270)
593+
if (isRotationCurve)
594+
{
595+
var expectedQuat = Quaternion.Euler(new Vector3(expectedKeyValue, 0, 0));
596+
var actualQuat = Quaternion.Euler(new Vector3(actualKeyValue, 0, 0));
597+
Assert.That(Quaternion.Angle(expectedQuat, actualQuat), Is.LessThan(0.1), string.Format("{0} key ({1}) doesn't match", message, key.time));
598+
}
599+
else
600+
{
601+
Assert.That(expectedKeyValue, Is.EqualTo(actualKeyValue).Within(0.1), string.Format("{0} key ({1}) doesn't match", message, key.time));
602+
}
574603
}
575604
}
576605

0 commit comments

Comments
 (0)