Skip to content

Commit 3146533

Browse files
authored
API Implementation: Add Indexer to Vectors (dotnet#60517)
* Add indexer for Vector2 * Add indexer for Vector3 * Add indexer for Vector4 * Add indexer for Quaternion * Add indexer for Matrix3x2 * Add indexer for Matrix4x4 * Add indexer for Vector64<T>, Vector128<T> and Vector256<T> * Implement better codegen * Replace switch-tree by if-else-construct and add add Debug.Assert call to indexer of Matrix3x2 * More performant indexer implementation for Vector64<T> * Improve performance of Indexers for Vector64<T>, Vector128<T> and Vector256<T> * Improve code readability * Easier index implementation for Vector64<T>, Vector128<T> and Vector256<T> * Implement slimmer index implementation for Matrix3x2<T> and Matrix4x4<T> * Implement GetElement/SetElement on various types * Usage of Vector2 instead of Vector4 * Implement GetElement/SetElement for Vector2 and Vector3 * Remove setters * Made Count const in Vector2, Vector3 and Vector4 * Implement GetElement/WithElement Extensions for Quaternion, Vector2, Vector3 and Vector4 * Setter implementation for Matrix3x2 and Matrix4x4 * Fix Quaternion * Clone vectors in WithElement of QuaternionExtensions, Vector2Extensions, Vector3Extensions, Vector4Extensions * Make QuaternionExtensions, Vector2Extensions, Vector3Extensions and Vector4Extensions internal * Replace Extension Methods with normal static methods in Quaternion, Vector2, Vector3 and Vector4 * Make WithElement public and SetElementUnsafe internal in Quaternion, Vector2, Vector3 and Vector4 * Add methods and indexers to references * Fix Matrix3x2 and Matrix4x4 * Update that the setter of Quaternion, Vector2, Vector3 and Vector4 sets `this` to the result of WithElement * Simplify SetElementUnsafe in Vector2, Vector3 and Vector4 * Simplify SetElementUnsafe in Quaternion * Add test cases for Matrix3x2, Matrix4x4, Quaternion, Vector2, Vector3 and Vector4 * Add indexer to reference for Vector64<T>, Vector128<T> and Vector256<T> * Fix solution file * Make WithElement in Quaternion, Vector2, Vector3 and Vector4 internal * Fix project file of System.Private.CoreLib.Shared * Fix indentation in System.Numerics.Vectors reference * Code improvements * Fix solution file * Remove unsafe from reference * Add Tests for Vector64<T>, Vector128<T> and Vector256<T> * Create Test project for System.Runtime.Intrinsics and move vector tests from System.Runtime to System.Runtime.Intrinsics * Fix test cases * recreate System.Runtime.sln * Fix System.Runtime.sln and remove old Vector Tests * Implement usage of ThrowHelper for Matrix3x2 and Matrix4x4 * Replace Assert.All over array by Assert.Equal in Vector128Tests * Replace Assert.All over array by Assert.Equal in Vector256Tests * Replace Assert.All over array by Assert.Equal in Vector64Tests * Fix indexer tests for Vector64<T> * Fix indexer tests for Vector128<T> * Fix indexer tests for Vector256<T> * Fix indexer of Matrix3x2 * Fix indexer of Matrix4x4
1 parent 30fb4c0 commit 3146533

22 files changed

Lines changed: 749 additions & 29 deletions

src/libraries/System.Numerics.Vectors/ref/System.Numerics.Vectors.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public partial struct Matrix3x2 : System.IEquatable<System.Numerics.Matrix3x2>
1616
public float M32;
1717
public Matrix3x2(float m11, float m12, float m21, float m22, float m31, float m32) { throw null; }
1818
public static System.Numerics.Matrix3x2 Identity { get { throw null; } }
19+
public float this[int row, int column] { get { throw null; } set { throw null; } }
1920
public readonly bool IsIdentity { get { throw null; } }
2021
public System.Numerics.Vector2 Translation { readonly get { throw null; } set { } }
2122
public static System.Numerics.Matrix3x2 Add(System.Numerics.Matrix3x2 value1, System.Numerics.Matrix3x2 value2) { throw null; }
@@ -71,6 +72,7 @@ public partial struct Matrix4x4 : System.IEquatable<System.Numerics.Matrix4x4>
7172
public Matrix4x4(System.Numerics.Matrix3x2 value) { throw null; }
7273
public Matrix4x4(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44) { throw null; }
7374
public static System.Numerics.Matrix4x4 Identity { get { throw null; } }
75+
public float this[int row, int column] { get { throw null; } set { throw null; } }
7476
public readonly bool IsIdentity { get { throw null; } }
7577
public System.Numerics.Vector3 Translation { readonly get { throw null; } set { } }
7678
public static System.Numerics.Matrix4x4 Add(System.Numerics.Matrix4x4 value1, System.Numerics.Matrix4x4 value2) { throw null; }
@@ -155,6 +157,7 @@ public partial struct Quaternion : System.IEquatable<System.Numerics.Quaternion>
155157
public Quaternion(float x, float y, float z, float w) { throw null; }
156158
public static System.Numerics.Quaternion Zero { get { throw null; } }
157159
public static System.Numerics.Quaternion Identity { get { throw null; } }
160+
public float this[int index] { get { throw null; } set { throw null; } }
158161
public readonly bool IsIdentity { get { throw null; } }
159162
public static System.Numerics.Quaternion Add(System.Numerics.Quaternion value1, System.Numerics.Quaternion value2) { throw null; }
160163
public static System.Numerics.Quaternion Concatenate(System.Numerics.Quaternion value1, System.Numerics.Quaternion value2) { throw null; }
@@ -313,6 +316,7 @@ public partial struct Vector2 : System.IEquatable<System.Numerics.Vector2>, Syst
313316
public static System.Numerics.Vector2 One { get { throw null; } }
314317
public static System.Numerics.Vector2 UnitX { get { throw null; } }
315318
public static System.Numerics.Vector2 UnitY { get { throw null; } }
319+
public float this[int index] { get { throw null; } set { throw null; } }
316320
public static System.Numerics.Vector2 Zero { get { throw null; } }
317321
public static System.Numerics.Vector2 Abs(System.Numerics.Vector2 value) { throw null; }
318322
public static System.Numerics.Vector2 Add(System.Numerics.Vector2 left, System.Numerics.Vector2 right) { throw null; }
@@ -374,6 +378,7 @@ public partial struct Vector3 : System.IEquatable<System.Numerics.Vector3>, Syst
374378
public static System.Numerics.Vector3 UnitX { get { throw null; } }
375379
public static System.Numerics.Vector3 UnitY { get { throw null; } }
376380
public static System.Numerics.Vector3 UnitZ { get { throw null; } }
381+
public float this[int index] { get { throw null; } set { throw null; } }
377382
public static System.Numerics.Vector3 Zero { get { throw null; } }
378383
public static System.Numerics.Vector3 Abs(System.Numerics.Vector3 value) { throw null; }
379384
public static System.Numerics.Vector3 Add(System.Numerics.Vector3 left, System.Numerics.Vector3 right) { throw null; }
@@ -437,6 +442,7 @@ public partial struct Vector4 : System.IEquatable<System.Numerics.Vector4>, Syst
437442
public static System.Numerics.Vector4 UnitX { get { throw null; } }
438443
public static System.Numerics.Vector4 UnitY { get { throw null; } }
439444
public static System.Numerics.Vector4 UnitZ { get { throw null; } }
445+
public float this[int index] { get { throw null; } set { throw null; } }
440446
public static System.Numerics.Vector4 Zero { get { throw null; } }
441447
public static System.Numerics.Vector4 Abs(System.Numerics.Vector4 value) { throw null; }
442448
public static System.Numerics.Vector4 Add(System.Numerics.Vector4 left, System.Numerics.Vector4 right) { throw null; }

src/libraries/System.Numerics.Vectors/tests/Matrix3x2Tests.cs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace System.Numerics.Tests
88
{
9-
public class Matrix3x2Tests
9+
public sealed class Matrix3x2Tests
1010
{
1111
static Matrix3x2 GenerateIncrementalMatrixNumber(float value = 0.0f)
1212
{
@@ -27,6 +27,47 @@ static Matrix3x2 GenerateTestMatrix()
2727
return m;
2828
}
2929

30+
[Theory]
31+
[InlineData(0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f)]
32+
[InlineData(1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f)]
33+
[InlineData(3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f, 3.1434343f, 1.1234123f)]
34+
[InlineData(1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f, 1.0000001f, 0.0000001f)]
35+
public void Matrix3x2IndexerGetTest(float m11, float m12, float m21, float m22, float m31, float m32)
36+
{
37+
var matrix = new Matrix3x2(m11, m12, m21, m22, m31, m32);
38+
39+
Assert.Equal(m11, matrix[0, 0]);
40+
Assert.Equal(m12, matrix[0, 1]);
41+
Assert.Equal(m21, matrix[1, 0]);
42+
Assert.Equal(m22, matrix[1, 1]);
43+
Assert.Equal(m31, matrix[2, 0]);
44+
Assert.Equal(m32, matrix[2, 1]);
45+
}
46+
47+
[Theory]
48+
[InlineData(0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f)]
49+
[InlineData(1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f)]
50+
[InlineData(3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f, 3.1434343f, 1.1234123f)]
51+
[InlineData(1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f, 1.0000001f, 0.0000001f)]
52+
public void Matrix3x2IndexerSetTest(float m11, float m12, float m21, float m22, float m31, float m32)
53+
{
54+
var matrix = new Matrix3x2(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
55+
56+
matrix[0, 0] = m11;
57+
matrix[0, 1] = m12;
58+
matrix[1, 0] = m21;
59+
matrix[1, 1] = m22;
60+
matrix[2, 0] = m31;
61+
matrix[2, 1] = m32;
62+
63+
Assert.Equal(m11, matrix[0, 0]);
64+
Assert.Equal(m12, matrix[0, 1]);
65+
Assert.Equal(m21, matrix[1, 0]);
66+
Assert.Equal(m22, matrix[1, 1]);
67+
Assert.Equal(m31, matrix[2, 0]);
68+
Assert.Equal(m32, matrix[2, 1]);
69+
}
70+
3071
// A test for Identity
3172
[Fact]
3273
public void Matrix3x2IdentityTest()

src/libraries/System.Numerics.Vectors/tests/Matrix4x4Tests.cs

Lines changed: 81 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace System.Numerics.Tests
99
{
10-
public class Matrix4x4Tests
10+
public sealed class Matrix4x4Tests
1111
{
1212
static Matrix4x4 GenerateIncrementalMatrixNumber(float value = 0.0f)
1313
{
@@ -41,6 +41,86 @@ static Matrix4x4 GenerateTestMatrix()
4141
return m;
4242
}
4343

44+
[Theory]
45+
[InlineData(0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f)]
46+
[InlineData(1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f)]
47+
[InlineData(3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f, 3.1434343f, 1.1234123f, 3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f, 3.1434343f, 1.1234123f, 3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f)]
48+
[InlineData(1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f, 1.0000001f, 0.0000001f, 1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f, 1.0000001f, 0.0000001f, 1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f)]
49+
public void Matrix4x4IndexerGetTest(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44)
50+
{
51+
var matrix = new Matrix4x4(m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44);
52+
53+
Assert.Equal(m11, matrix[0, 0]);
54+
Assert.Equal(m12, matrix[0, 1]);
55+
Assert.Equal(m13, matrix[0, 2]);
56+
Assert.Equal(m14, matrix[0, 3]);
57+
58+
Assert.Equal(m21, matrix[1, 0]);
59+
Assert.Equal(m22, matrix[1, 1]);
60+
Assert.Equal(m23, matrix[1, 2]);
61+
Assert.Equal(m24, matrix[1, 3]);
62+
63+
Assert.Equal(m31, matrix[2, 0]);
64+
Assert.Equal(m32, matrix[2, 1]);
65+
Assert.Equal(m33, matrix[2, 2]);
66+
Assert.Equal(m34, matrix[2, 3]);
67+
68+
Assert.Equal(m41, matrix[3, 0]);
69+
Assert.Equal(m42, matrix[3, 1]);
70+
Assert.Equal(m43, matrix[3, 2]);
71+
Assert.Equal(m44, matrix[3, 3]);
72+
}
73+
74+
[Theory]
75+
[InlineData(0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f)]
76+
[InlineData(1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f)]
77+
[InlineData(3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f, 3.1434343f, 1.1234123f, 3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f, 3.1434343f, 1.1234123f, 3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f)]
78+
[InlineData(1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f, 1.0000001f, 0.0000001f, 1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f, 1.0000001f, 0.0000001f, 1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f)]
79+
public void Matrix4x4IndexerSetTest(float m11, float m12, float m13, float m14, float m21, float m22, float m23, float m24, float m31, float m32, float m33, float m34, float m41, float m42, float m43, float m44)
80+
{
81+
var matrix = new Matrix4x4(0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f);
82+
83+
matrix[0, 0] = m11;
84+
matrix[0, 1] = m12;
85+
matrix[0, 2] = m13;
86+
matrix[0, 3] = m14;
87+
88+
matrix[1, 0] = m21;
89+
matrix[1, 1] = m22;
90+
matrix[1, 2] = m23;
91+
matrix[1, 3] = m24;
92+
93+
matrix[2, 0] = m31;
94+
matrix[2, 1] = m32;
95+
matrix[2, 2] = m33;
96+
matrix[2, 3] = m34;
97+
98+
matrix[3, 0] = m41;
99+
matrix[3, 1] = m42;
100+
matrix[3, 2] = m43;
101+
matrix[3, 3] = m44;
102+
103+
Assert.Equal(m11, matrix[0, 0]);
104+
Assert.Equal(m12, matrix[0, 1]);
105+
Assert.Equal(m13, matrix[0, 2]);
106+
Assert.Equal(m14, matrix[0, 3]);
107+
108+
Assert.Equal(m21, matrix[1, 0]);
109+
Assert.Equal(m22, matrix[1, 1]);
110+
Assert.Equal(m23, matrix[1, 2]);
111+
Assert.Equal(m24, matrix[1, 3]);
112+
113+
Assert.Equal(m31, matrix[2, 0]);
114+
Assert.Equal(m32, matrix[2, 1]);
115+
Assert.Equal(m33, matrix[2, 2]);
116+
Assert.Equal(m34, matrix[2, 3]);
117+
118+
Assert.Equal(m41, matrix[3, 0]);
119+
Assert.Equal(m42, matrix[3, 1]);
120+
Assert.Equal(m43, matrix[3, 2]);
121+
Assert.Equal(m44, matrix[3, 3]);
122+
}
123+
44124
// A test for Identity
45125
[Fact]
46126
public void Matrix4x4IdentityTest()

src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace System.Numerics.Tests
99
{
10-
public class QuaternionTests
10+
public sealed class QuaternionTests
1111
{
1212
// A test for Dot (Quaternion, Quaternion)
1313
[Fact]
@@ -23,6 +23,41 @@ public void QuaternionDotTest()
2323
Assert.True(MathHelper.Equal(expected, actual), $"Quaternion.Dot did not return the expected value: expected {expected} actual {actual}");
2424
}
2525

26+
[Theory]
27+
[InlineData(0.0f, 1.0f, 0.0f, 1.0f)]
28+
[InlineData(1.0f, 0.0f, 1.0f, 0.0f)]
29+
[InlineData(3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f)]
30+
[InlineData(1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f)]
31+
public void QuaternionIndexerGetTest(float x, float y, float z, float w)
32+
{
33+
var quaternion = new Quaternion(x, y, z, w);
34+
35+
Assert.Equal(x, quaternion[0]);
36+
Assert.Equal(y, quaternion[1]);
37+
Assert.Equal(z, quaternion[2]);
38+
Assert.Equal(w, quaternion[3]);
39+
}
40+
41+
[Theory]
42+
[InlineData(0.0f, 1.0f, 0.0f, 1.0f)]
43+
[InlineData(1.0f, 0.0f, 1.0f, 0.0f)]
44+
[InlineData(3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f)]
45+
[InlineData(1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f)]
46+
public void QuaternionIndexerSetTest(float x, float y, float z, float w)
47+
{
48+
var quaternion = new Quaternion(0.0f, 0.0f, 0.0f, 0.0f);
49+
50+
quaternion[0] = x;
51+
quaternion[1] = y;
52+
quaternion[2] = z;
53+
quaternion[3] = w;
54+
55+
Assert.Equal(x, quaternion[0]);
56+
Assert.Equal(y, quaternion[1]);
57+
Assert.Equal(z, quaternion[2]);
58+
Assert.Equal(w, quaternion[3]);
59+
}
60+
2661
// A test for Length ()
2762
[Fact]
2863
public void QuaternionLengthTest()

src/libraries/System.Numerics.Vectors/tests/Vector2Tests.cs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace System.Numerics.Tests
99
{
10-
public class Vector2Tests
10+
public sealed class Vector2Tests
1111
{
1212
[Fact]
1313
public void Vector2MarshalSizeTest()
@@ -16,6 +16,35 @@ public void Vector2MarshalSizeTest()
1616
Assert.Equal(8, Marshal.SizeOf<Vector2>(new Vector2()));
1717
}
1818

19+
[Theory]
20+
[InlineData(0.0f, 1.0f)]
21+
[InlineData(1.0f, 0.0f)]
22+
[InlineData(3.1434343f, 1.1234123f)]
23+
[InlineData(1.0000001f, 0.0000001f)]
24+
public void Vector2IndexerGetTest(float x, float y)
25+
{
26+
var vector = new Vector2(x, y);
27+
28+
Assert.Equal(x, vector[0]);
29+
Assert.Equal(y, vector[1]);
30+
}
31+
32+
[Theory]
33+
[InlineData(0.0f, 1.0f)]
34+
[InlineData(1.0f, 0.0f)]
35+
[InlineData(3.1434343f, 1.1234123f)]
36+
[InlineData(1.0000001f, 0.0000001f)]
37+
public void Vector2IndexerSetTest(float x, float y)
38+
{
39+
var vector = new Vector2(0.0f, 0.0f);
40+
41+
vector[0] = x;
42+
vector[1] = y;
43+
44+
Assert.Equal(x, vector[0]);
45+
Assert.Equal(y, vector[1]);
46+
}
47+
1948
[Fact]
2049
public void Vector2CopyToTest()
2150
{

src/libraries/System.Numerics.Vectors/tests/Vector3Tests.cs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace System.Numerics.Tests
99
{
10-
public class Vector3Tests
10+
public sealed class Vector3Tests
1111
{
1212
[Fact]
1313
public void Vector3MarshalSizeTest()
@@ -16,6 +16,38 @@ public void Vector3MarshalSizeTest()
1616
Assert.Equal(12, Marshal.SizeOf<Vector3>(new Vector3()));
1717
}
1818

19+
[Theory]
20+
[InlineData(0.0f, 1.0f, 0.0f)]
21+
[InlineData(1.0f, 0.0f, 1.0f)]
22+
[InlineData(3.1434343f, 1.1234123f, 0.1234123f)]
23+
[InlineData(1.0000001f, 0.0000001f, 2.0000001f)]
24+
public void Vector3IndexerGetTest(float x, float y, float z)
25+
{
26+
var vector = new Vector3(x, y, z);
27+
28+
Assert.Equal(x, vector[0]);
29+
Assert.Equal(y, vector[1]);
30+
Assert.Equal(z, vector[2]);
31+
}
32+
33+
[Theory]
34+
[InlineData(0.0f, 1.0f, 0.0f)]
35+
[InlineData(1.0f, 0.0f, 1.0f)]
36+
[InlineData(3.1434343f, 1.1234123f, 0.1234123f)]
37+
[InlineData(1.0000001f, 0.0000001f, 2.0000001f)]
38+
public void Vector3IndexerSetTest(float x, float y, float z)
39+
{
40+
var vector = new Vector3(0.0f, 0.0f, 0.0f);
41+
42+
vector[0] = x;
43+
vector[1] = y;
44+
vector[2] = z;
45+
46+
Assert.Equal(x, vector[0]);
47+
Assert.Equal(y, vector[1]);
48+
Assert.Equal(z, vector[2]);
49+
}
50+
1951
[Fact]
2052
public void Vector3CopyToTest()
2153
{

src/libraries/System.Numerics.Vectors/tests/Vector4Tests.cs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace System.Numerics.Tests
99
{
10-
public class Vector4Tests
10+
public sealed class Vector4Tests
1111
{
1212
[Fact]
1313
public void Vector4MarshalSizeTest()
@@ -16,6 +16,41 @@ public void Vector4MarshalSizeTest()
1616
Assert.Equal(16, Marshal.SizeOf<Vector4>(new Vector4()));
1717
}
1818

19+
[Theory]
20+
[InlineData(0.0f, 1.0f, 0.0f, 1.0f)]
21+
[InlineData(1.0f, 0.0f, 1.0f, 0.0f)]
22+
[InlineData(3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f)]
23+
[InlineData(1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f)]
24+
public void Vector4IndexerGetTest(float x, float y, float z, float w)
25+
{
26+
var vector = new Vector4(x, y, z, w);
27+
28+
Assert.Equal(x, vector[0]);
29+
Assert.Equal(y, vector[1]);
30+
Assert.Equal(z, vector[2]);
31+
Assert.Equal(w, vector[3]);
32+
}
33+
34+
[Theory]
35+
[InlineData(0.0f, 1.0f, 0.0f, 1.0f)]
36+
[InlineData(1.0f, 0.0f, 1.0f, 0.0f)]
37+
[InlineData(3.1434343f, 1.1234123f, 0.1234123f, -0.1234123f)]
38+
[InlineData(1.0000001f, 0.0000001f, 2.0000001f, 0.0000002f)]
39+
public void Vector4IndexerSetTest(float x, float y, float z, float w)
40+
{
41+
var vector = new Vector4(0.0f, 0.0f, 0.0f, 0.0f);
42+
43+
vector[0] = x;
44+
vector[1] = y;
45+
vector[2] = z;
46+
vector[3] = w;
47+
48+
Assert.Equal(x, vector[0]);
49+
Assert.Equal(y, vector[1]);
50+
Assert.Equal(z, vector[2]);
51+
Assert.Equal(w, vector[3]);
52+
}
53+
1954
[Fact]
2055
public void Vector4CopyToTest()
2156
{

0 commit comments

Comments
 (0)