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