Mirror for Friday Night Funkin
1package funkin.util.tools;
2
3import massive.munit.util.Timer;
4import massive.munit.Assert;
5import massive.munit.async.AsyncFactory;
6import funkin.util.tools.ArrayTools;
7
8@:nullSafety
9@:access(funkin.util.tools.ArrayTools)
10class ArraySortToolsTest extends FunkinTest
11{
12 public function new()
13 {
14 super();
15 }
16
17 @BeforeClass
18 public function beforeClass() {}
19
20 @AfterClass
21 public function afterClass() {}
22
23 @Before
24 public function setup() {}
25
26 @After
27 public function tearDown() {}
28
29 @Test
30 public function testMergeSort()
31 {
32 var testArray:Array<Int> = [5, 4, 3, 2, 1];
33
34 function compare(a:Int, b:Int)
35 {
36 return a - b;
37 }
38
39 ArraySortTools.mergeSort(testArray, compare);
40
41 Assert.areEqual(testArray[0], 1);
42 Assert.areEqual(testArray[1], 2);
43 Assert.areEqual(testArray[2], 3);
44 Assert.areEqual(testArray[3], 4);
45 Assert.areEqual(testArray[4], 5);
46
47 var testArray2:Array<Int> = [9, 6, 3, 12];
48
49 ArraySortTools.mergeSort(testArray2, compare);
50
51 Assert.areEqual(testArray2[0], 3);
52 Assert.areEqual(testArray2[1], 6);
53 Assert.areEqual(testArray2[2], 9);
54 Assert.areEqual(testArray2[3], 12);
55
56 // Just make sure these don't crash.
57 ArraySortTools.mergeSort([], compare);
58 }
59
60 @Test
61 @:nullSafety(Off)
62 public function testMergeSortNull()
63 {
64 var testArray:Array<Int> = [5, 4, 3, 2, 1];
65
66 function compare(a:Int, b:Int)
67 {
68 return a - b;
69 }
70
71 // Just make sure these don't crash.
72 ArraySortTools.mergeSort(null, compare);
73 ArraySortTools.mergeSort([], null);
74 ArraySortTools.mergeSort(null, null);
75
76 // Make sure these throw an exception.
77 FunkinAssert.validateThrows(function() {
78 ArraySortTools.mergeSort(testArray, null);
79 }, function(err) {
80 return err == 'No comparison function provided.';
81 });
82 }
83
84 @Test
85 public function testQuickSort()
86 {
87 var testArray:Array<Int> = [5, 4, 3, 2, 1];
88
89 function compare(a:Int, b:Int)
90 {
91 return a - b;
92 }
93
94 ArraySortTools.quickSort(testArray, compare);
95
96 Assert.areEqual(testArray[0], 1);
97 Assert.areEqual(testArray[1], 2);
98 Assert.areEqual(testArray[2], 3);
99 Assert.areEqual(testArray[3], 4);
100 Assert.areEqual(testArray[4], 5);
101
102 var testArray2:Array<Int> = [9, 6, 3, 12];
103
104 ArraySortTools.quickSort(testArray2, compare);
105
106 Assert.areEqual(testArray2[0], 3);
107 Assert.areEqual(testArray2[1], 6);
108 Assert.areEqual(testArray2[2], 9);
109 Assert.areEqual(testArray2[3], 12);
110 }
111
112 @Test
113 @:nullSafety(Off)
114 public function testQuickSortNull()
115 {
116 var testArray:Array<Int> = [5, 4, 3, 2, 1];
117
118 function compare(a:Int, b:Int)
119 {
120 return a - b;
121 }
122
123 // Just make sure these don't crash.
124 ArraySortTools.quickSort([], compare);
125 ArraySortTools.quickSort(null, compare);
126 ArraySortTools.quickSort([], null);
127 ArraySortTools.quickSort(null, null);
128
129 // Make sure these throw an exception.
130 FunkinAssert.validateThrows(function() {
131 ArraySortTools.quickSort(testArray, null);
132 }, function(err) {
133 return err == 'No comparison function provided.';
134 });
135 }
136
137 @Test
138 public function testInsertionSort()
139 {
140 var testArray:Array<Int> = [5, 4, 3, 2, 1];
141
142 function compare(a:Int, b:Int)
143 {
144 return a - b;
145 }
146
147 ArraySortTools.insertionSort(testArray, compare);
148
149 Assert.areEqual(testArray[0], 1);
150 Assert.areEqual(testArray[1], 2);
151 Assert.areEqual(testArray[2], 3);
152 Assert.areEqual(testArray[3], 4);
153 Assert.areEqual(testArray[4], 5);
154
155 var testArray2:Array<Int> = [9, 6, 3, 12];
156
157 ArraySortTools.insertionSort(testArray2, compare);
158
159 Assert.areEqual(testArray2[0], 3);
160 Assert.areEqual(testArray2[1], 6);
161 Assert.areEqual(testArray2[2], 9);
162 Assert.areEqual(testArray2[3], 12);
163 }
164
165 @Test
166 @:nullSafety(Off)
167 public function testInsertionSortNull()
168 {
169 var testArray:Array<Int> = [5, 4, 3, 2, 1];
170
171 function compare(a:Int, b:Int)
172 {
173 return a - b;
174 }
175
176 // Just make sure these don't crash.
177 ArraySortTools.insertionSort([], compare);
178 ArraySortTools.insertionSort(null, compare);
179 ArraySortTools.insertionSort([], null);
180 ArraySortTools.insertionSort(null, null);
181
182 // Make sure these throw an exception.
183 FunkinAssert.validateThrows(function() {
184 ArraySortTools.insertionSort(testArray, null);
185 }, function(err) {
186 return err == 'No comparison function provided.';
187 });
188 }
189}