@@ -62,6 +62,22 @@ void ExpectTransformEq(const RadientTransform& Transform, const RadientTransform
6262 EXPECT_EQ (Transform.Scale .z , Reference.Scale .z );
6363}
6464
65+ void ExpectTransformNear (const RadientTransform& Transform, const RadientTransform& Reference)
66+ {
67+ EXPECT_NEAR (Transform.Position .x , Reference.Position .x , EPSILON );
68+ EXPECT_NEAR (Transform.Position .y , Reference.Position .y , EPSILON );
69+ EXPECT_NEAR (Transform.Position .z , Reference.Position .z , EPSILON );
70+
71+ EXPECT_NEAR (Transform.Rotation .x , Reference.Rotation .x , EPSILON );
72+ EXPECT_NEAR (Transform.Rotation .y , Reference.Rotation .y , EPSILON );
73+ EXPECT_NEAR (Transform.Rotation .z , Reference.Rotation .z , EPSILON );
74+ EXPECT_NEAR (Transform.Rotation .w , Reference.Rotation .w , EPSILON );
75+
76+ EXPECT_NEAR (Transform.Scale .x , Reference.Scale .x , EPSILON );
77+ EXPECT_NEAR (Transform.Scale .y , Reference.Scale .y , EPSILON );
78+ EXPECT_NEAR (Transform.Scale .z , Reference.Scale .z , EPSILON );
79+ }
80+
6581void ExpectMatrixNear (const RadientMatrix4x4& Matrix, const RadientMatrix4x4& Reference)
6682{
6783 for (Uint32 i = 0 ; i < 16 ; ++i)
@@ -1143,41 +1159,50 @@ TEST(RadientSceneStateTest, GetLocalTransform)
11431159 EXPECT_EQ (State.GetLocalTransform (Entity, Transform), RADIENT_STATUS_OK );
11441160 ExpectTransformEq (Transform, RadientTransform{});
11451161
1146- // Creation with an initial transform should preserve the exact TRS values.
1162+ // Creation with an initial transform should normalize rotation once before
1163+ // storing local TRS values.
11471164 RadientTransform InitialTransform;
11481165 InitialTransform.Position = {1 .f , 2 .f , 3 .f };
1149- InitialTransform.Rotation .z = 0 . 70710678f ;
1150- InitialTransform.Rotation .w = 0 . 70710678f ;
1166+ InitialTransform.Rotation .z = 2 . f ;
1167+ InitialTransform.Rotation .w = 2 . f ;
11511168 InitialTransform.Scale = {2 .f , 3 .f , 4 .f };
11521169
1170+ RadientTransform ExpectedInitialTransform = InitialTransform;
1171+ ExpectedInitialTransform.Rotation .z = 0 .70710678f ;
1172+ ExpectedInitialTransform.Rotation .w = 0 .70710678f ;
1173+
11531174 RadientEntityDesc EntityDesc;
11541175 EntityDesc.Transform = InitialTransform;
11551176
11561177 RadientEntityID TransformedEntity = InvalidRadientEntityID;
11571178 EXPECT_EQ (State.CreateEntity (EntityDesc, TransformedEntity), RADIENT_STATUS_OK );
11581179 EXPECT_EQ (State.GetLocalTransform (TransformedEntity, Transform), RADIENT_STATUS_OK );
1159- ExpectTransformEq (Transform, InitialTransform );
1180+ ExpectTransformNear (Transform, ExpectedInitialTransform );
11601181
11611182 RadientTransform UpdatedTransform;
11621183 UpdatedTransform.Position = {4 .f , 5 .f , 6 .f };
1163- UpdatedTransform.Rotation .x = 0 . 70710678f ;
1164- UpdatedTransform.Rotation .w = 0 . 70710678f ;
1184+ UpdatedTransform.Rotation .x = 2 . f ;
1185+ UpdatedTransform.Rotation .w = 2 . f ;
11651186 UpdatedTransform.Scale = {5 .f , 6 .f , 7 .f };
11661187
1188+ RadientTransform ExpectedUpdatedTransform = UpdatedTransform;
1189+ ExpectedUpdatedTransform.Rotation .x = 0 .70710678f ;
1190+ ExpectedUpdatedTransform.Rotation .w = 0 .70710678f ;
1191+
11671192 EXPECT_EQ (State.SetLocalTransform (TransformedEntity, UpdatedTransform), RADIENT_STATUS_OK );
11681193 EXPECT_EQ (State.GetLocalTransform (TransformedEntity, Transform), RADIENT_STATUS_OK );
1169- ExpectTransformEq (Transform, UpdatedTransform );
1194+ ExpectTransformNear (Transform, ExpectedUpdatedTransform );
11701195
1171- // Setting the same transform again should report no change.
1196+ // Setting an equivalent non-unit transform again should report no change.
11721197 EXPECT_EQ (State.SetLocalTransform (TransformedEntity, UpdatedTransform), RADIENT_STATUS_NO_CHANGE );
11731198 EXPECT_EQ (State.GetLocalTransform (TransformedEntity, Transform), RADIENT_STATUS_OK );
1174- ExpectTransformEq (Transform, UpdatedTransform );
1199+ ExpectTransformNear (Transform, ExpectedUpdatedTransform );
11751200
11761201 EXPECT_EQ (State.GetLocalTransform (Entity, Transform), RADIENT_STATUS_OK );
11771202 ExpectTransformEq (Transform, RadientTransform{});
11781203
11791204 EXPECT_EQ (State.DestroyEntity (TransformedEntity), RADIENT_STATUS_OK );
1180- Transform = UpdatedTransform ;
1205+ Transform = ExpectedUpdatedTransform ;
11811206 // Destroyed entities should report not found and reset output transform.
11821207 EXPECT_EQ (State.GetLocalTransform (TransformedEntity, Transform), RADIENT_STATUS_NOT_FOUND );
11831208 ExpectTransformEq (Transform, RadientTransform{});
0 commit comments