From ede0ee94506f8ef24b8aa4fc9d73f8d7635b81eb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Takym=20=28=E3=81=9F=E3=81=8B=E3=82=84=E3=81=BE=29?=
<15681312+Takym@users.noreply.github.com>
Date: Sat, 14 Aug 2021 00:56:37 +0900
Subject: [PATCH 1/7] Add `Zero` and `IsZero` properties to `Quaternion`.
---
.../src/System/Numerics/Quaternion.cs | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
index ed863caca43be1..0a777613470d3a 100644
--- a/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
@@ -51,6 +51,13 @@ public Quaternion(Vector3 vectorPart, float scalarPart)
W = scalarPart;
}
+ /// Gets a quaternion that represents a zero.
+ /// A quaternion whose values are (0, 0, 0, 0).
+ public static Quaternion Zero
+ {
+ get => default;
+ }
+
/// Gets a quaternion that represents no rotation.
/// A quaternion whose values are (0, 0, 0, 1).
public static Quaternion Identity
@@ -58,6 +65,14 @@ public static Quaternion Identity
get => new Quaternion(0, 0, 0, 1);
}
+ /// Gets a value that indicates whether the current instance is the zero quaternion.
+ /// if the current instance is the zero quaternion; otherwise, .
+ ///
+ public readonly bool IsZero
+ {
+ get => this == Zero;
+ }
+
/// Gets a value that indicates whether the current instance is the identity quaternion.
/// if the current instance is the identity quaternion; otherwise, .
///
From 1829b951f33bdc5c6278f651ea45cae247906a05 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Takym=20=28=E3=81=9F=E3=81=8B=E3=82=84=E3=81=BE=29?=
<15681312+Takym@users.noreply.github.com>
Date: Wed, 18 Aug 2021 04:33:21 +0900
Subject: [PATCH 2/7] Added test codes for Quaternion.Zero and IsZero.
---
.../tests/QuaternionTests.cs | 22 +++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs b/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
index a7e27420c09fdc..14eff55d8551a3 100644
--- a/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
+++ b/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
@@ -877,6 +877,28 @@ public void QuaternionEqualsTest1()
actual = a.Equals(b);
Assert.Equal(expected, actual);
}
+
+ // A test for Zero
+ [Fact]
+ public void QuaternionZeroTest()
+ {
+ Quaternion val = default;
+ Assert.Equal(val, Quaternion.Zero);
+ }
+
+ // A test for IsZero
+ [Fact]
+ public void QuaternionIsZeroTest()
+ {
+ Assert.True(Quaternion.Zero.IsZero);
+ Assert.True(default(Quaternion).IsZero);
+ Assert.True(new Quaternion().IsZero);
+ Assert.True(new Quaternion(0, 0, 0, 0).IsZero);
+ Assert.False(new Quaternion(0, 0, 0, 1).IsZero);
+ Assert.False(new Quaternion(1, 0, 0, 1).IsZero);
+ Assert.False(new Quaternion(0, 1, 0, 1).IsZero);
+ Assert.False(new Quaternion(0, 0, 1, 1).IsZero);
+ }
// A test for Identity
[Fact]
From 7a54468d73b0013c6210068b05843ce717b6bc18 Mon Sep 17 00:00:00 2001
From: Takym <15681312+Takym@users.noreply.github.com>
Date: Wed, 18 Aug 2021 07:52:45 +0900
Subject: [PATCH 3/7] Update the reference assembly for Quaternion.
---
.../System.Numerics.Vectors/ref/System.Numerics.Vectors.cs | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/libraries/System.Numerics.Vectors/ref/System.Numerics.Vectors.cs b/src/libraries/System.Numerics.Vectors/ref/System.Numerics.Vectors.cs
index 1824bd38d32558..80f1d13355d804 100644
--- a/src/libraries/System.Numerics.Vectors/ref/System.Numerics.Vectors.cs
+++ b/src/libraries/System.Numerics.Vectors/ref/System.Numerics.Vectors.cs
@@ -153,7 +153,9 @@ public partial struct Quaternion : System.IEquatable
public float Z;
public Quaternion(System.Numerics.Vector3 vectorPart, float scalarPart) { throw null; }
public Quaternion(float x, float y, float z, float w) { throw null; }
+ public static System.Numerics.Quaternion Zero { get { throw null; } }
public static System.Numerics.Quaternion Identity { get { throw null; } }
+ public readonly bool IsZero { get { throw null; } }
public readonly bool IsIdentity { get { throw null; } }
public static System.Numerics.Quaternion Add(System.Numerics.Quaternion value1, System.Numerics.Quaternion value2) { throw null; }
public static System.Numerics.Quaternion Concatenate(System.Numerics.Quaternion value1, System.Numerics.Quaternion value2) { throw null; }
From fa587ff25a43fa0a3e476a910f691f16d4ce21df Mon Sep 17 00:00:00 2001
From: Takym <15681312+Takym@users.noreply.github.com>
Date: Wed, 18 Aug 2021 07:56:34 +0900
Subject: [PATCH 4/7] Remove the `Quaternion.IsZero` property.
---
.../ref/System.Numerics.Vectors.cs | 1 -
.../tests/QuaternionTests.cs | 16 +---------------
.../src/System/Numerics/Quaternion.cs | 8 --------
3 files changed, 1 insertion(+), 24 deletions(-)
diff --git a/src/libraries/System.Numerics.Vectors/ref/System.Numerics.Vectors.cs b/src/libraries/System.Numerics.Vectors/ref/System.Numerics.Vectors.cs
index 80f1d13355d804..2819d363252049 100644
--- a/src/libraries/System.Numerics.Vectors/ref/System.Numerics.Vectors.cs
+++ b/src/libraries/System.Numerics.Vectors/ref/System.Numerics.Vectors.cs
@@ -155,7 +155,6 @@ public partial struct Quaternion : System.IEquatable
public Quaternion(float x, float y, float z, float w) { throw null; }
public static System.Numerics.Quaternion Zero { get { throw null; } }
public static System.Numerics.Quaternion Identity { get { throw null; } }
- public readonly bool IsZero { get { throw null; } }
public readonly bool IsIdentity { get { throw null; } }
public static System.Numerics.Quaternion Add(System.Numerics.Quaternion value1, System.Numerics.Quaternion value2) { throw null; }
public static System.Numerics.Quaternion Concatenate(System.Numerics.Quaternion value1, System.Numerics.Quaternion value2) { throw null; }
diff --git a/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs b/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
index 14eff55d8551a3..7340f980c55cf8 100644
--- a/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
+++ b/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
@@ -877,7 +877,7 @@ public void QuaternionEqualsTest1()
actual = a.Equals(b);
Assert.Equal(expected, actual);
}
-
+
// A test for Zero
[Fact]
public void QuaternionZeroTest()
@@ -886,20 +886,6 @@ public void QuaternionZeroTest()
Assert.Equal(val, Quaternion.Zero);
}
- // A test for IsZero
- [Fact]
- public void QuaternionIsZeroTest()
- {
- Assert.True(Quaternion.Zero.IsZero);
- Assert.True(default(Quaternion).IsZero);
- Assert.True(new Quaternion().IsZero);
- Assert.True(new Quaternion(0, 0, 0, 0).IsZero);
- Assert.False(new Quaternion(0, 0, 0, 1).IsZero);
- Assert.False(new Quaternion(1, 0, 0, 1).IsZero);
- Assert.False(new Quaternion(0, 1, 0, 1).IsZero);
- Assert.False(new Quaternion(0, 0, 1, 1).IsZero);
- }
-
// A test for Identity
[Fact]
public void QuaternionIdentityTest()
diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
index 0a777613470d3a..e040bbadc2e399 100644
--- a/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
@@ -65,14 +65,6 @@ public static Quaternion Identity
get => new Quaternion(0, 0, 0, 1);
}
- /// Gets a value that indicates whether the current instance is the zero quaternion.
- /// if the current instance is the zero quaternion; otherwise, .
- ///
- public readonly bool IsZero
- {
- get => this == Zero;
- }
-
/// Gets a value that indicates whether the current instance is the identity quaternion.
/// if the current instance is the identity quaternion; otherwise, .
///
From 316bc1eec8c792fff355f71e0fc692bdc45dc7cd Mon Sep 17 00:00:00 2001
From: Takym <15681312+Takym@users.noreply.github.com>
Date: Wed, 1 Sep 2021 11:47:52 +0900
Subject: [PATCH 5/7] Quaternion.Zero, change `default` to `new()`
---
.../System.Numerics.Vectors/tests/QuaternionTests.cs | 6 +++++-
.../src/System/Numerics/Quaternion.cs | 2 +-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs b/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
index 14eff55d8551a3..472a2040e33a87 100644
--- a/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
+++ b/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
@@ -882,7 +882,11 @@ public void QuaternionEqualsTest1()
[Fact]
public void QuaternionZeroTest()
{
- Quaternion val = default;
+ Quaternion val = new();
+ Assert.Equal(val, Quaternion.Zero);
+
+ // The default value should be equal to a zero value.
+ val = default;
Assert.Equal(val, Quaternion.Zero);
}
diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
index 0a777613470d3a..bba2f2d61d2a2d 100644
--- a/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
@@ -55,7 +55,7 @@ public Quaternion(Vector3 vectorPart, float scalarPart)
/// A quaternion whose values are (0, 0, 0, 0).
public static Quaternion Zero
{
- get => default;
+ get => new();
}
/// Gets a quaternion that represents no rotation.
From 274db04b70be0790761e727f4b645d5a9aad7c2f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Takym=20=28=E3=81=9F=E3=81=8B=E3=82=84=E3=81=BE=29?=
<15681312+Takym@users.noreply.github.com>
Date: Wed, 1 Sep 2021 12:34:37 +0900
Subject: [PATCH 6/7] Update
src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
Co-authored-by: Stephen Toub
---
.../System.Private.CoreLib/src/System/Numerics/Quaternion.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs b/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
index c9995ab02309a4..e040bbadc2e399 100644
--- a/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
+++ b/src/libraries/System.Private.CoreLib/src/System/Numerics/Quaternion.cs
@@ -55,7 +55,7 @@ public Quaternion(Vector3 vectorPart, float scalarPart)
/// A quaternion whose values are (0, 0, 0, 0).
public static Quaternion Zero
{
- get => new();
+ get => default;
}
/// Gets a quaternion that represents no rotation.
From e19e94b71b8a54abc4ffd8d6f3c3deab6f6458ab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Takym=20=28=E3=81=9F=E3=81=8B=E3=82=84=E3=81=BE=29?=
<15681312+Takym@users.noreply.github.com>
Date: Wed, 1 Sep 2021 12:40:49 +0900
Subject: [PATCH 7/7] Update QuaternionTests.cs
---
.../tests/QuaternionTests.cs | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs b/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
index 0f565994c8059f..d2fe660d2f58c7 100644
--- a/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
+++ b/src/libraries/System.Numerics.Vectors/tests/QuaternionTests.cs
@@ -882,12 +882,14 @@ public void QuaternionEqualsTest1()
[Fact]
public void QuaternionZeroTest()
{
- Quaternion val = new();
- Assert.Equal(val, Quaternion.Zero);
-
- // The default value should be equal to a zero value.
- val = default;
- Assert.Equal(val, Quaternion.Zero);
+ // A default value should be equal to a zero value.
+ Assert.Equal(default(Quaternion), Quaternion.Zero);
+
+ // A newly constructed value should be equal to a zero value.
+ Assert.Equal(new Quaternion(), Quaternion.Zero);
+
+ // A newly constructed value with (0, 0, 0, 0) should be equal to a zero value.
+ Assert.Equal(new Quaternion(0, 0, 0, 0), Quaternion.Zero);
}
// A test for Identity