Skip to content

Commit c5f269c

Browse files
author
Olivier Dionne
committed
adding tests
1 parent f20390f commit c5f269c

File tree

3 files changed

+90
-7
lines changed

3 files changed

+90
-7
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
using NUnit.Framework;
2+
using static Unity.Mathematics.math;
3+
using Burst.Compiler.IL.Tests;
4+
5+
namespace Unity.Mathematics.Tests
6+
{
7+
[TestFixture]
8+
class TestAffineTransform
9+
{
10+
[TestCompiler]
11+
public static void affine_transform_inverse()
12+
{
13+
const float tolerance = 1e-6f;
14+
15+
var tx = AffineTransform(float3(5, 6, 7), normalize(math.float4(1, 2, 3, 4)), float3(2, 3, 4));
16+
var invTx = inverse(tx);
17+
18+
TestUtils.AreEqual(float4x4.identity, float4x4(mul(tx, invTx)), tolerance);
19+
}
20+
21+
[TestCompiler]
22+
public static void affine_transform_inverse_zero_rs_returns_zero()
23+
{
24+
const float tolerance = 1e-30f;
25+
26+
var tx = AffineTransform(float3(5, 6, 7), normalize(float4(1, 2, 3, 4)), float3.zero);
27+
var invTx = inverse(tx);
28+
29+
TestUtils.AreEqual(float4x4.zero, invTx, tolerance);
30+
}
31+
32+
[TestCompiler]
33+
public static void affine_transform_inverse_pico_scale()
34+
{
35+
// slightly larger tolerance (vs 1e-6f) for PS4
36+
const float tolerance = 2e-6f;
37+
38+
var tx = AffineTransform(float3(5, 6, 7), normalize(float4(1, 2, 3, 4)), float3(1e-12f, 1e-12f, 1e-12f));
39+
var invTx = inverse(tx);
40+
41+
TestUtils.AreEqual(float4x4.identity, float4x4(mul(tx, invTx)), tolerance);
42+
}
43+
44+
[TestCompiler]
45+
public static void affine_transform_inverse_singular()
46+
{
47+
// it needs a bit larger tolerance for singular
48+
// since it uses the svd iterative solver
49+
const float tolerance = 1e-1f;
50+
51+
var tx = AffineTransform(float3(5, 6, 7), normalize(float4(1, 2, 3, 4)), float3(0, 3, 4));
52+
var invTx = inverse(tx);
53+
54+
// pseudo inverse penrose #1 test
55+
var testTx = mul(mul(tx, invTx), tx);
56+
TestUtils.AreEqual(float4x4(tx), float4x4(testTx), tolerance);
57+
}
58+
59+
[TestCompiler]
60+
public static void affine_transform_decompose()
61+
{
62+
const float tolerance = 1e-6f;
63+
64+
var tx = AffineTransform(float3(5, 6, 7), normalize(float4(1, 2, 3, 4)), float3(2, 3, 4));
65+
decompose(tx, out var t, out var r, out var s);
66+
67+
// Recompose matrix
68+
var testTx = AffineTransform(t, r, s);
69+
TestUtils.AreEqual(float4x4(tx), float4x4(testTx), tolerance);
70+
}
71+
}
72+
}

src/Tests/Tests/Shared/TestAffineTransform.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Unity.Mathematics/affine_transform.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,25 +111,25 @@ public string ToString(string format, IFormatProvider formatProvider)
111111
public static partial class math
112112
{
113113
[MethodImpl(MethodImplOptions.AggressiveInlining)]
114-
public static AffineTransform AffineTransform(float3 translation, quaternion rotation) { return AffineTransform(translation, rotation); }
114+
public static AffineTransform AffineTransform(float3 translation, quaternion rotation) { return new AffineTransform(translation, rotation); }
115115

116116
[MethodImpl(MethodImplOptions.AggressiveInlining)]
117-
public static AffineTransform AffineTransform(float3 translation, quaternion rotation, float3 scale) { return AffineTransform(translation, rotation, scale); }
117+
public static AffineTransform AffineTransform(float3 translation, quaternion rotation, float3 scale) { return new AffineTransform(translation, rotation, scale); }
118118

119119
[MethodImpl(MethodImplOptions.AggressiveInlining)]
120-
public static AffineTransform AffineTransform(float3 translation, float3x3 rs) { return AffineTransform(translation, rs); }
120+
public static AffineTransform AffineTransform(float3 translation, float3x3 rs) { return new AffineTransform(translation, rs); }
121121

122122
[MethodImpl(MethodImplOptions.AggressiveInlining)]
123-
public static AffineTransform AffineTransform(float4x4 m) { return AffineTransform(m); }
123+
public static AffineTransform AffineTransform(float4x4 m) { return new AffineTransform(m); }
124124

125125
[MethodImpl(MethodImplOptions.AggressiveInlining)]
126-
public static AffineTransform AffineTransform(float3x4 m) { return AffineTransform(m); }
126+
public static AffineTransform AffineTransform(float3x4 m) { return new AffineTransform(m); }
127127

128128
[MethodImpl(MethodImplOptions.AggressiveInlining)]
129-
public static AffineTransform AffineTransform(float3x3 m) { return AffineTransform(m); }
129+
public static AffineTransform AffineTransform(float3x3 m) { return new AffineTransform(m); }
130130

131131
[MethodImpl(MethodImplOptions.AggressiveInlining)]
132-
public static AffineTransform AffineTransform(RigidTransform m) { return AffineTransform(m); }
132+
public static AffineTransform AffineTransform(RigidTransform m) { return new AffineTransform (m); }
133133

134134
[MethodImpl(MethodImplOptions.AggressiveInlining)]
135135
public static float4x4 float4x4(AffineTransform transform) { return float4x4(float4(transform.rs.c0, 0f), float4(transform.rs.c1, 0f), float4(transform.rs.c2, 0f), float4(transform.t, 1f)); }

0 commit comments

Comments
 (0)