@@ -9,8 +9,8 @@ public static class TimSorterTests
9
9
private static readonly TimSorterSettings Settings = new ( ) ;
10
10
11
11
[ Test ]
12
- public static void ArraySorted (
13
- [ Random ( 0 , 10_000 , 2000 ) ] int n )
12
+ public static void Sort_ShouldBeEquivalentToSuccessfulBasicSort (
13
+ [ Random ( 0 , 10_000 , 5000 ) ] int n )
14
14
{
15
15
// Arrange
16
16
var sorter = new TimSorter < int > ( Settings , IntComparer ) ;
@@ -25,7 +25,7 @@ public static void ArraySorted(
25
25
}
26
26
27
27
[ Test ]
28
- public static void TinyArray ( )
28
+ public static void Sort_TinyArray_ShouldSortCorrectly ( )
29
29
{
30
30
// Arrange
31
31
var sorter = new TimSorter < int > ( Settings , IntComparer ) ;
@@ -40,7 +40,7 @@ public static void TinyArray()
40
40
}
41
41
42
42
[ Test ]
43
- public static void SmallChunks ( )
43
+ public static void Sort_SmallChunks_ShouldSortCorrectly ( )
44
44
{
45
45
// Arrange
46
46
var sorter = new TimSorter < int > ( Settings , IntComparer ) ;
@@ -63,4 +63,74 @@ public static void SmallChunks()
63
63
// Assert
64
64
Assert . That ( correctArray , Is . EqualTo ( testArray ) ) ;
65
65
}
66
+
67
+ [ Test ]
68
+ public static void Sort_ThrowsArgumentNullException_WhenArrayIsNull ( )
69
+ {
70
+ // Arrange
71
+ var sorter = new TimSorter < int > ( Settings , IntComparer ) ;
72
+
73
+ // Act & Assert
74
+ Assert . Throws < ArgumentNullException > ( ( ) => sorter . Sort ( null ! , IntComparer ) ) ;
75
+ }
76
+
77
+ [ Test ]
78
+ public static void Sort_UsesDefaultComparer_WhenComparerIsNull ( )
79
+ {
80
+ // Arrange
81
+ var sorter = new TimSorter < int > ( Settings , null ! ) ;
82
+ var ( correctArray , testArray ) = RandomHelper . GetArrays ( 20 ) ;
83
+
84
+ // Act
85
+ sorter . Sort ( testArray , IntComparer ) ;
86
+ Array . Sort ( correctArray , IntComparer ) ;
87
+
88
+ // Assert
89
+ Assert . That ( correctArray , Is . EqualTo ( testArray ) ) ;
90
+ }
91
+
92
+ [ Test ]
93
+ public static void Sort_AlreadySortedArray_RemainsUnchanged ( )
94
+ {
95
+ // Arrange
96
+ var sorter = new TimSorter < int > ( Settings , IntComparer ) ;
97
+ var array = new [ ] { 1 , 2 , 3 , 4 , 5 } ;
98
+ var expected = new [ ] { 1 , 2 , 3 , 4 , 5 } ;
99
+
100
+ // Act
101
+ sorter . Sort ( array , IntComparer ) ;
102
+
103
+ // Assert
104
+ Assert . That ( array , Is . EqualTo ( expected ) ) ;
105
+ }
106
+
107
+ [ Test ]
108
+ public static void MergeAt_ShouldReturnEarly_WhenLenAIsZero ( )
109
+ {
110
+ // Arrange: left run is all less than right run's first element
111
+ var array = Enumerable . Range ( 1 , 25 ) . Concat ( Enumerable . Range ( 100 , 25 ) ) . ToArray ( ) ;
112
+ var sortedArray = Enumerable . Range ( 1 , 25 ) . Concat ( Enumerable . Range ( 100 , 25 ) ) . ToArray ( ) ;
113
+ var sorter = new TimSorter < int > ( new TimSorterSettings ( ) , Comparer < int > . Default ) ;
114
+
115
+ // Act
116
+ sorter . Sort ( array , Comparer < int > . Default ) ;
117
+
118
+ // Assert: Array order will not have changed, and the lenA <= 0 branch should be hit
119
+ Assert . That ( sortedArray , Is . EqualTo ( array ) ) ;
120
+ }
121
+
122
+ [ Test ]
123
+ public static void MergeAt_ShouldReturnEarly_WhenLenBIsZero ( )
124
+ {
125
+ // Arrange: right run is all less than left run's last element
126
+ var array = Enumerable . Range ( 100 , 25 ) . Concat ( Enumerable . Range ( 1 , 25 ) ) . ToArray ( ) ;
127
+ var sortedArray = Enumerable . Range ( 1 , 25 ) . Concat ( Enumerable . Range ( 100 , 25 ) ) . ToArray ( ) ;
128
+ var sorter = new TimSorter < int > ( new TimSorterSettings ( ) , Comparer < int > . Default ) ;
129
+
130
+ // Act
131
+ sorter . Sort ( array , Comparer < int > . Default ) ;
132
+
133
+ // Assert: The left and right sides of the array should have swapped places, and the lenB <= 0 branch should be hit
134
+ Assert . That ( sortedArray , Is . EqualTo ( array ) ) ;
135
+ }
66
136
}
0 commit comments