Skip to content

Commit 4eea964

Browse files
committed
refactor(tests): convert async Task to void for sync test methods
TUnit used async Assert.That() which required async methods. After migration to MSTest + AwesomeAssertions, these methods no longer await anything. Changes across 28 files: - Removed `using System.Threading.Tasks;` where no longer needed - Changed `public async Task TestName()` to `public void TestName()` - Converted 2 remaining Assert.ThrowsAsync to AwesomeAssertions .Should().Throw() Benefits: - Cleaner code without unnecessary async state machines - ~20KB smaller IL output - Follows MSTest conventions for sync tests
1 parent 5a4a4c0 commit 4eea964

28 files changed

Lines changed: 878 additions & 906 deletions

test/NumSharp.UnitTest/APIs/CountNonzeroTests.cs

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Threading.Tasks;
32
using NumSharp;
43
using NumSharp.UnitTest.Utilities;
54

@@ -15,7 +14,7 @@ public class CountNonzeroTests
1514
#region Element-wise (No Axis)
1615

1716
[TestMethod]
18-
public async Task CountNonzero_1D_ReturnsCount()
17+
public void CountNonzero_1D_ReturnsCount()
1918
{
2019
// NumPy: np.count_nonzero([0, 1, 0, 2]) = 2
2120
var a = np.array(new int[] { 0, 1, 0, 2 });
@@ -25,7 +24,7 @@ public async Task CountNonzero_1D_ReturnsCount()
2524
}
2625

2726
[TestMethod]
28-
public async Task CountNonzero_1D_AllZero_ReturnsZero()
27+
public void CountNonzero_1D_AllZero_ReturnsZero()
2928
{
3029
// NumPy: np.count_nonzero([0, 0, 0]) = 0
3130
var a = np.array(new int[] { 0, 0, 0 });
@@ -35,7 +34,7 @@ public async Task CountNonzero_1D_AllZero_ReturnsZero()
3534
}
3635

3736
[TestMethod]
38-
public async Task CountNonzero_1D_AllNonzero_ReturnsSize()
37+
public void CountNonzero_1D_AllNonzero_ReturnsSize()
3938
{
4039
// NumPy: np.count_nonzero([1, 2, 3]) = 3
4140
var a = np.array(new int[] { 1, 2, 3 });
@@ -45,7 +44,7 @@ public async Task CountNonzero_1D_AllNonzero_ReturnsSize()
4544
}
4645

4746
[TestMethod]
48-
public async Task CountNonzero_2D_ReturnsTotal()
47+
public void CountNonzero_2D_ReturnsTotal()
4948
{
5049
// NumPy: np.count_nonzero([[0, 1], [2, 0]]) = 2
5150
var a = np.array(new int[,] { { 0, 1 }, { 2, 0 } });
@@ -55,7 +54,7 @@ public async Task CountNonzero_2D_ReturnsTotal()
5554
}
5655

5756
[TestMethod]
58-
public async Task CountNonzero_Empty_ReturnsZero()
57+
public void CountNonzero_Empty_ReturnsZero()
5958
{
6059
// NumPy: np.count_nonzero([]) = 0
6160
var a = np.array(new int[0]);
@@ -69,7 +68,7 @@ public async Task CountNonzero_Empty_ReturnsZero()
6968
#region Boolean Arrays
7069

7170
[TestMethod]
72-
public async Task CountNonzero_Boolean_TrueIsNonzero()
71+
public void CountNonzero_Boolean_TrueIsNonzero()
7372
{
7473
// NumPy: np.count_nonzero([False, True, False, True]) = 2
7574
var a = np.array(new bool[] { false, true, false, true });
@@ -83,7 +82,7 @@ public async Task CountNonzero_Boolean_TrueIsNonzero()
8382
#region Float Arrays
8483

8584
[TestMethod]
86-
public async Task CountNonzero_Float_ZeroIsExact()
85+
public void CountNonzero_Float_ZeroIsExact()
8786
{
8887
// NumPy: np.count_nonzero([0.0, 1.0, 0.0, 2.0]) = 2
8988
var a = np.array(new double[] { 0.0, 1.0, 0.0, 2.0 });
@@ -93,7 +92,7 @@ public async Task CountNonzero_Float_ZeroIsExact()
9392
}
9493

9594
[TestMethod]
96-
public async Task CountNonzero_Float_NaN_IsNonzero()
95+
public void CountNonzero_Float_NaN_IsNonzero()
9796
{
9897
// NumPy: np.count_nonzero([0.0, nan, 0.0]) = 1
9998
var a = np.array(new double[] { 0.0, double.NaN, 0.0 });
@@ -107,7 +106,7 @@ public async Task CountNonzero_Float_NaN_IsNonzero()
107106
#region Axis Reduction
108107

109108
[TestMethod]
110-
public async Task CountNonzero_2D_Axis0()
109+
public void CountNonzero_2D_Axis0()
111110
{
112111
// NumPy: np.count_nonzero([[0, 1, 2], [3, 0, 0]], axis=0) = [1, 1, 1]
113112
var a = np.array(new int[,] { { 0, 1, 2 }, { 3, 0, 0 } });
@@ -120,7 +119,7 @@ public async Task CountNonzero_2D_Axis0()
120119
}
121120

122121
[TestMethod]
123-
public async Task CountNonzero_2D_Axis1()
122+
public void CountNonzero_2D_Axis1()
124123
{
125124
// NumPy: np.count_nonzero([[0, 1, 2], [3, 0, 0]], axis=1) = [2, 1]
126125
var a = np.array(new int[,] { { 0, 1, 2 }, { 3, 0, 0 } });
@@ -132,7 +131,7 @@ public async Task CountNonzero_2D_Axis1()
132131
}
133132

134133
[TestMethod]
135-
public async Task CountNonzero_2D_Axis0_Keepdims()
134+
public void CountNonzero_2D_Axis0_Keepdims()
136135
{
137136
// NumPy: np.count_nonzero([[0, 1, 2], [3, 0, 0]], axis=0, keepdims=True) = [[1, 1, 1]] (shape 1,3)
138137
var a = np.array(new int[,] { { 0, 1, 2 }, { 3, 0, 0 } });
@@ -146,7 +145,7 @@ public async Task CountNonzero_2D_Axis0_Keepdims()
146145
}
147146

148147
[TestMethod]
149-
public async Task CountNonzero_2D_NegativeAxis()
148+
public void CountNonzero_2D_NegativeAxis()
150149
{
151150
// NumPy: np.count_nonzero([[0, 1, 2], [3, 0, 0]], axis=-1) = [2, 1]
152151
var a = np.array(new int[,] { { 0, 1, 2 }, { 3, 0, 0 } });
@@ -158,7 +157,7 @@ public async Task CountNonzero_2D_NegativeAxis()
158157
}
159158

160159
[TestMethod]
161-
public async Task CountNonzero_3D_Axis1()
160+
public void CountNonzero_3D_Axis1()
162161
{
163162
// 3D array with shape (2, 2, 3) reduced along axis 1 gives shape (2, 3)
164163
var a = np.zeros(new Shape(2, 2, 3), NPTypeCode.Int32);
@@ -183,7 +182,7 @@ public async Task CountNonzero_3D_Axis1()
183182
#region Empty Array Axis Reduction
184183

185184
[TestMethod]
186-
public async Task CountNonzero_Empty2D_Axis0_ReturnsZeros()
185+
public void CountNonzero_Empty2D_Axis0_ReturnsZeros()
187186
{
188187
// NumPy: np.count_nonzero(np.zeros((0, 3)), axis=0) = [0, 0, 0]
189188
var a = np.zeros(new Shape(0, 3), NPTypeCode.Int32);
@@ -196,7 +195,7 @@ public async Task CountNonzero_Empty2D_Axis0_ReturnsZeros()
196195
}
197196

198197
[TestMethod]
199-
public async Task CountNonzero_Empty2D_Axis1_ReturnsEmpty()
198+
public void CountNonzero_Empty2D_Axis1_ReturnsEmpty()
200199
{
201200
// NumPy: np.count_nonzero(np.zeros((0, 3)), axis=1) = [] (shape (0,))
202201
var a = np.zeros(new Shape(0, 3), NPTypeCode.Int32);

test/NumSharp.UnitTest/APIs/np.can_cast.BattleTest.cs

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Threading.Tasks;
32

43
namespace NumSharp.UnitTest.APIs;
54

@@ -12,62 +11,62 @@ public class NpCanCastBattleTests
1211
#region Safe Casting - Type to Type
1312

1413
[TestMethod]
15-
public async Task CanCast_SameType_AlwaysTrue()
14+
public void CanCast_SameType_AlwaysTrue()
1615
{
1716
np.can_cast(NPTypeCode.Int32, NPTypeCode.Int32).Should().BeTrue();
1817
np.can_cast(NPTypeCode.Double, NPTypeCode.Double).Should().BeTrue();
1918
np.can_cast(NPTypeCode.Boolean, NPTypeCode.Boolean).Should().BeTrue();
2019
}
2120

2221
[TestMethod]
23-
public async Task CanCast_BoolToIntegers_Safe()
22+
public void CanCast_BoolToIntegers_Safe()
2423
{
2524
np.can_cast(NPTypeCode.Boolean, NPTypeCode.Byte).Should().BeTrue();
2625
np.can_cast(NPTypeCode.Boolean, NPTypeCode.Int32).Should().BeTrue();
2726
np.can_cast(NPTypeCode.Boolean, NPTypeCode.Int64).Should().BeTrue();
2827
}
2928

3029
[TestMethod]
31-
public async Task CanCast_BoolToFloats_Safe()
30+
public void CanCast_BoolToFloats_Safe()
3231
{
3332
np.can_cast(NPTypeCode.Boolean, NPTypeCode.Single).Should().BeTrue();
3433
np.can_cast(NPTypeCode.Boolean, NPTypeCode.Double).Should().BeTrue();
3534
}
3635

3736
[TestMethod]
38-
public async Task CanCast_ByteUpcast_Safe()
37+
public void CanCast_ByteUpcast_Safe()
3938
{
4039
np.can_cast(NPTypeCode.Byte, NPTypeCode.Int16).Should().BeTrue();
4140
np.can_cast(NPTypeCode.Byte, NPTypeCode.Int32).Should().BeTrue();
4241
np.can_cast(NPTypeCode.Byte, NPTypeCode.Double).Should().BeTrue();
4342
}
4443

4544
[TestMethod]
46-
public async Task CanCast_Int32ToInt64_Safe()
45+
public void CanCast_Int32ToInt64_Safe()
4746
{
4847
np.can_cast(NPTypeCode.Int32, NPTypeCode.Int64).Should().BeTrue();
4948
}
5049

5150
[TestMethod]
52-
public async Task CanCast_Int64ToInt32_NotSafe()
51+
public void CanCast_Int64ToInt32_NotSafe()
5352
{
5453
np.can_cast(NPTypeCode.Int64, NPTypeCode.Int32).Should().BeFalse();
5554
}
5655

5756
[TestMethod]
58-
public async Task CanCast_Float32ToFloat64_Safe()
57+
public void CanCast_Float32ToFloat64_Safe()
5958
{
6059
np.can_cast(NPTypeCode.Single, NPTypeCode.Double).Should().BeTrue();
6160
}
6261

6362
[TestMethod]
64-
public async Task CanCast_Float64ToFloat32_NotSafe()
63+
public void CanCast_Float64ToFloat32_NotSafe()
6564
{
6665
np.can_cast(NPTypeCode.Double, NPTypeCode.Single).Should().BeFalse();
6766
}
6867

6968
[TestMethod]
70-
public async Task CanCast_FloatToInt_NotSafe()
69+
public void CanCast_FloatToInt_NotSafe()
7170
{
7271
np.can_cast(NPTypeCode.Double, NPTypeCode.Int32).Should().BeFalse();
7372
}
@@ -77,34 +76,34 @@ public async Task CanCast_FloatToInt_NotSafe()
7776
#region Casting Modes
7877

7978
[TestMethod]
80-
public async Task CanCast_NoMode_OnlySameType()
79+
public void CanCast_NoMode_OnlySameType()
8180
{
8281
np.can_cast(NPTypeCode.Int32, NPTypeCode.Int32, "no").Should().BeTrue();
8382
np.can_cast(NPTypeCode.Int32, NPTypeCode.Int64, "no").Should().BeFalse();
8483
}
8584

8685
[TestMethod]
87-
public async Task CanCast_SameKindMode_AllowsDowncastWithinKind()
86+
public void CanCast_SameKindMode_AllowsDowncastWithinKind()
8887
{
8988
np.can_cast(NPTypeCode.Int32, NPTypeCode.Int16, "same_kind").Should().BeTrue();
9089
np.can_cast(NPTypeCode.Double, NPTypeCode.Single, "same_kind").Should().BeTrue();
9190
}
9291

9392
[TestMethod]
94-
public async Task CanCast_SameKindMode_RejectsCrossKind()
93+
public void CanCast_SameKindMode_RejectsCrossKind()
9594
{
9695
np.can_cast(NPTypeCode.Int32, NPTypeCode.Single, "same_kind").Should().BeFalse();
9796
}
9897

9998
[TestMethod]
100-
public async Task CanCast_UnsafeMode_AllowsAnything()
99+
public void CanCast_UnsafeMode_AllowsAnything()
101100
{
102101
np.can_cast(NPTypeCode.Double, NPTypeCode.Int32, "unsafe").Should().BeTrue();
103102
np.can_cast(NPTypeCode.Int64, NPTypeCode.Byte, "unsafe").Should().BeTrue();
104103
}
105104

106105
[TestMethod]
107-
public async Task CanCast_InvalidMode_Throws()
106+
public void CanCast_InvalidMode_Throws()
108107
{
109108
new Action(() => np.can_cast(NPTypeCode.Int32, NPTypeCode.Int64, "invalid")).Should().Throw<Exception>();
110109
}
@@ -114,35 +113,35 @@ public async Task CanCast_InvalidMode_Throws()
114113
#region Scalar Value Tests
115114

116115
[TestMethod]
117-
public async Task CanCast_IntScalar_FitsInByte()
116+
public void CanCast_IntScalar_FitsInByte()
118117
{
119118
np.can_cast(0, NPTypeCode.Byte).Should().BeTrue();
120119
np.can_cast(255, NPTypeCode.Byte).Should().BeTrue();
121120
}
122121

123122
[TestMethod]
124-
public async Task CanCast_IntScalar_ExceedsByte()
123+
public void CanCast_IntScalar_ExceedsByte()
125124
{
126125
np.can_cast(256, NPTypeCode.Byte).Should().BeFalse();
127126
np.can_cast(-1, NPTypeCode.Byte).Should().BeFalse();
128127
}
129128

130129
[TestMethod]
131-
public async Task CanCast_BooleanBoundaries()
130+
public void CanCast_BooleanBoundaries()
132131
{
133132
np.can_cast(0, NPTypeCode.Boolean).Should().BeTrue();
134133
np.can_cast(1, NPTypeCode.Boolean).Should().BeTrue();
135134
np.can_cast(2, NPTypeCode.Boolean).Should().BeFalse();
136135
}
137136

138137
[TestMethod]
139-
public async Task CanCast_LongScalar_FitsInInt32()
138+
public void CanCast_LongScalar_FitsInInt32()
140139
{
141140
np.can_cast((long)int.MaxValue, NPTypeCode.Int32).Should().BeTrue();
142141
}
143142

144143
[TestMethod]
145-
public async Task CanCast_LongScalar_ExceedsInt32()
144+
public void CanCast_LongScalar_ExceedsInt32()
146145
{
147146
np.can_cast((long)int.MaxValue + 1, NPTypeCode.Int32).Should().BeFalse();
148147
}
@@ -152,25 +151,25 @@ public async Task CanCast_LongScalar_ExceedsInt32()
152151
#region Generic Overload Tests
153152

154153
[TestMethod]
155-
public async Task CanCast_Generic_IntToLong()
154+
public void CanCast_Generic_IntToLong()
156155
{
157156
np.can_cast<int, long>().Should().BeTrue();
158157
}
159158

160159
[TestMethod]
161-
public async Task CanCast_Generic_LongToInt()
160+
public void CanCast_Generic_LongToInt()
162161
{
163162
np.can_cast<long, int>().Should().BeFalse();
164163
}
165164

166165
[TestMethod]
167-
public async Task CanCast_Generic_FloatToDouble()
166+
public void CanCast_Generic_FloatToDouble()
168167
{
169168
np.can_cast<float, double>().Should().BeTrue();
170169
}
171170

172171
[TestMethod]
173-
public async Task CanCast_Generic_SameKind()
172+
public void CanCast_Generic_SameKind()
174173
{
175174
np.can_cast<int, short>("same_kind").Should().BeTrue();
176175
}
@@ -180,31 +179,31 @@ public async Task CanCast_Generic_SameKind()
180179
#region Primitive Type Overloads
181180

182181
[TestMethod]
183-
public async Task CanCast_ByteOverload()
182+
public void CanCast_ByteOverload()
184183
{
185184
np.can_cast((byte)100, NPTypeCode.Int32).Should().BeTrue();
186185
}
187186

188187
[TestMethod]
189-
public async Task CanCast_ShortOverload()
188+
public void CanCast_ShortOverload()
190189
{
191190
np.can_cast((short)-100, NPTypeCode.Byte).Should().BeFalse();
192191
}
193192

194193
[TestMethod]
195-
public async Task CanCast_ULongOverload()
194+
public void CanCast_ULongOverload()
196195
{
197196
np.can_cast(ulong.MaxValue, NPTypeCode.Int64).Should().BeFalse();
198197
}
199198

200199
[TestMethod]
201-
public async Task CanCast_FloatOverload()
200+
public void CanCast_FloatOverload()
202201
{
203202
np.can_cast(1.0f, NPTypeCode.Double).Should().BeTrue();
204203
}
205204

206205
[TestMethod]
207-
public async Task CanCast_BoolOverload()
206+
public void CanCast_BoolOverload()
208207
{
209208
np.can_cast(true, NPTypeCode.Int32).Should().BeTrue();
210209
}
@@ -214,14 +213,14 @@ public async Task CanCast_BoolOverload()
214213
#region NDArray Tests
215214

216215
[TestMethod]
217-
public async Task CanCast_NDArray_ToLargerType()
216+
public void CanCast_NDArray_ToLargerType()
218217
{
219218
var arr = np.array(new int[] { 1, 2, 3 });
220219
np.can_cast(arr, NPTypeCode.Int64).Should().BeTrue();
221220
}
222221

223222
[TestMethod]
224-
public async Task CanCast_NDArray_ToSmallerType()
223+
public void CanCast_NDArray_ToSmallerType()
225224
{
226225
var arr = np.array(new int[] { 1, 2, 3 });
227226
np.can_cast(arr, NPTypeCode.Int16).Should().BeFalse();
@@ -232,13 +231,13 @@ public async Task CanCast_NDArray_ToSmallerType()
232231
#region Type Overload Tests
233232

234233
[TestMethod]
235-
public async Task CanCast_Type_IntToLong()
234+
public void CanCast_Type_IntToLong()
236235
{
237236
np.can_cast(typeof(int), typeof(long)).Should().BeTrue();
238237
}
239238

240239
[TestMethod]
241-
public async Task CanCast_Type_LongToInt()
240+
public void CanCast_Type_LongToInt()
242241
{
243242
np.can_cast(typeof(long), typeof(int)).Should().BeFalse();
244243
}

0 commit comments

Comments
 (0)