6 author = "AlliedModders LLC",
7 description = "Tests sorting functions",
9 url = "http://www.sourcemod.net/"
12 public OnPluginStart()
14 RegServerCmd("test_sort_ints", Command_TestSortInts)
15 RegServerCmd("test_sort_floats", Command_TestSortFloats)
16 RegServerCmd("test_sort_strings", Command_TestSortStrings)
17 RegServerCmd("test_sort_1d", Command_TestSort1D)
18 RegServerCmd("test_sort_2d", Command_TestSort2D)
19 RegServerCmd("test_adtsort_ints", Command_TestSortADTInts)
20 RegServerCmd("test_adtsort_floats", Command_TestSortADTFloats)
21 RegServerCmd("test_adtsort_strings", Command_TestSortADTStrings)
22 RegServerCmd("test_adtsort_custom", Command_TestSortADTCustom)
28 // Note that integer comparison is just int1-int2 (or a variation therein)
30 PrintIntegers(const array[], size)
32 for (new i=0; i<size; i++)
34 PrintToServer("array[%d] = %d", i, array[i])
38 public Action:Command_TestSortInts(args)
40 new array[10] = {6, 7, 3, 2, 8, 5, 0, 1, 4, 9}
42 PrintToServer("Testing ascending sort:")
43 SortIntegers(array, 10, Sort_Ascending)
44 PrintIntegers(array, 10)
46 PrintToServer("Testing descending sort:")
47 SortIntegers(array, 10, Sort_Descending)
48 PrintIntegers(array, 10)
53 /**************************
54 * Float comparison tests *
55 **************************/
57 PrintFloats(const Float:array[], size)
59 for (new i=0; i<size; i++)
61 PrintToServer("array[%d] = %f", i, array[i])
65 public Action:Command_TestSortFloats(args)
67 new Float:array[10] = {6.3, 7.6, 3.2, 2.1, 8.5, 5.2, 0.4, 1.7, 4.8, 8.2}
69 PrintToServer("Testing ascending sort:")
70 SortFloats(array, 10, Sort_Ascending)
71 PrintFloats(array, 10)
73 PrintToServer("Testing descending sort:")
74 SortFloats(array, 10, Sort_Descending)
75 PrintFloats(array, 10)
80 public Custom1DSort(elem1, elem2, const array[], Handle:hndl)
82 new Float:f1 = Float:elem1
83 new Float:f2 = Float:elem2
94 public Action:Command_TestSort1D(args)
96 new Float:array[10] = {6.3, 7.6, 3.2, 2.1, 8.5, 5.2, 0.4, 1.7, 4.8, 8.2}
98 SortCustom1D(_:array, 10, Custom1DSort)
99 PrintFloats(array, 10)
101 return Plugin_Handled
104 /***************************
105 * String comparison tests *
106 ***************************/
108 PrintStrings(const String:array[][], size)
110 for (new i=0; i<size; i++)
112 PrintToServer("array[%d] = %s", i, array[i])
116 public Action:Command_TestSortStrings(args)
118 new String:strarray[][] =
126 "johnny got his gun",
132 PrintToServer("Testing ascending sort:")
133 SortStrings(strarray, 10, Sort_Ascending)
134 PrintStrings(strarray, 10)
136 PrintToServer("Testing descending sort:")
137 SortStrings(strarray, 10, Sort_Descending)
138 PrintStrings(strarray, 10)
140 return Plugin_Handled
143 public Custom2DSort(String:elem1[], String:elem2[], String:array[][], Handle:hndl)
145 return strcmp(elem1, elem2)
148 public Action:Command_TestSort2D(args)
150 new String:array[][] =
158 "johnny got his gun",
164 SortCustom2D(_:array, 10, Custom2DSort)
165 PrintStrings(array, 10)
167 return Plugin_Handled
173 // Int and floats work the same as normal comparisions. Strings are direct
174 // comparisions with no hacky memory stuff like Pawn arrays.
176 PrintADTArrayIntegers(Handle:array)
178 new size = GetArraySize(array);
179 for (new i=0; i<size;i++)
181 PrintToServer("array[%d] = %d", i, GetArrayCell(array, i));
185 public Action:Command_TestSortADTInts(args)
187 new Handle:array = CreateArray();
188 PushArrayCell(array, 6);
189 PushArrayCell(array, 7);
190 PushArrayCell(array, 3);
191 PushArrayCell(array, 2);
192 PushArrayCell(array, 8);
193 PushArrayCell(array, 5);
194 PushArrayCell(array, 0);
195 PushArrayCell(array, 1);
196 PushArrayCell(array, 4);
197 PushArrayCell(array, 9);
199 PrintToServer("Testing ascending sort:")
200 SortADTArray(array, Sort_Ascending, Sort_Integer)
201 PrintADTArrayIntegers(array)
203 PrintToServer("Testing descending sort:")
204 SortADTArray(array, Sort_Descending, Sort_Integer)
205 PrintADTArrayIntegers(array)
207 return Plugin_Handled
211 PrintADTArrayFloats(Handle:array)
213 new size = GetArraySize(array);
214 for (new i=0; i<size;i++)
216 PrintToServer("array[%d] = %f", i, float:GetArrayCell(array, i));
220 public Action:Command_TestSortADTFloats(args)
222 new Handle:array = CreateArray();
223 PushArrayCell(array, 6.0);
224 PushArrayCell(array, 7.0);
225 PushArrayCell(array, 3.0);
226 PushArrayCell(array, 2.0);
227 PushArrayCell(array, 8.0);
228 PushArrayCell(array, 5.0);
229 PushArrayCell(array, 0.0);
230 PushArrayCell(array, 1.0);
231 PushArrayCell(array, 4.0);
232 PushArrayCell(array, 9.0);
234 PrintToServer("Testing ascending sort:")
235 SortADTArray(array, Sort_Ascending, Sort_Float)
236 PrintADTArrayFloats(array)
238 PrintToServer("Testing descending sort:")
239 SortADTArray(array, Sort_Descending, Sort_Float)
240 PrintADTArrayFloats(array)
242 return Plugin_Handled
245 PrintADTArrayStrings(Handle:array)
247 new size = GetArraySize(array);
248 decl String:buffer[64];
249 for (new i=0; i<size;i++)
251 GetArrayString(array, i, buffer, sizeof(buffer));
252 PrintToServer("array[%d] = %s", i, buffer);
256 public Action:Command_TestSortADTStrings(args)
258 new Handle:array = CreateArray(ByteCountToCells(64));
259 PushArrayString(array, "faluco");
260 PushArrayString(array, "bailopan");
261 PushArrayString(array, "pm onoto");
262 PushArrayString(array, "damaged soul");
263 PushArrayString(array, "sniperbeamer");
264 PushArrayString(array, "sidluke");
265 PushArrayString(array, "johnny got his gun");
266 PushArrayString(array, "gabe newell");
267 PushArrayString(array, "hello");
268 PushArrayString(array, "WHAT?!");
270 PrintToServer("Testing ascending sort:")
271 SortADTArray(array, Sort_Ascending, Sort_String)
272 PrintADTArrayStrings(array)
274 PrintToServer("Testing descending sort:")
275 SortADTArray(array, Sort_Descending, Sort_String)
276 PrintADTArrayStrings(array)
278 return Plugin_Handled
281 public ArrayADTCustomCallback(index1, index2, Handle:array, Handle:hndl)
283 decl String:buffer1[64], String:buffer2[64];
284 GetArrayString(array, index1, buffer1, sizeof(buffer1));
285 GetArrayString(array, index2, buffer2, sizeof(buffer2));
287 return strcmp(buffer1, buffer2);
290 public Action:Command_TestSortADTCustom(args)
292 new Handle:array = CreateArray(ByteCountToCells(64));
293 PushArrayString(array, "faluco");
294 PushArrayString(array, "bailopan");
295 PushArrayString(array, "pm onoto");
296 PushArrayString(array, "damaged soul");
297 PushArrayString(array, "sniperbeamer");
298 PushArrayString(array, "sidluke");
299 PushArrayString(array, "johnny got his gun");
300 PushArrayString(array, "gabe newell");
301 PushArrayString(array, "hello");
302 PushArrayString(array, "WHAT?!");
304 PrintToServer("Testing custom sort:")
305 SortADTArrayCustom(array, ArrayADTCustomCallback)
306 PrintADTArrayStrings(array);