plugins/testsuite/sorttest.sp
author Michael McKoy <ferret99gt@gmail.com>
Tue Nov 20 03:02:11 2007 +0000 (2007-11-20)
changeset 1701 9cf7f48da853
parent 535 f255342d132f
child 1917 3b9449e1cb98
permissions -rw-r--r--
Added sort functions for ADT Arrays, see sorting.inc
     1 #include <sourcemod>
     2 
     3 public Plugin:myinfo = 
     4 {
     5 	name = "Sorting Test",
     6 	author = "AlliedModders LLC",
     7 	description = "Tests sorting functions",
     8 	version = "1.0.0.0",
     9 	url = "http://www.sourcemod.net/"
    10 };
    11 
    12 public OnPluginStart()
    13 {
    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)
    23 }
    24 
    25 /*****************
    26  * INTEGER TESTS *
    27  *****************/
    28 // Note that integer comparison is just int1-int2 (or a variation therein)
    29 
    30 PrintIntegers(const array[], size)
    31 {
    32 	for (new i=0; i<size; i++)
    33 	{
    34 		PrintToServer("array[%d] = %d", i, array[i])
    35 	}
    36 }
    37 
    38 public Action:Command_TestSortInts(args)
    39 {
    40 	new array[10] = {6, 7, 3, 2, 8, 5, 0, 1, 4, 9}
    41 	
    42 	PrintToServer("Testing ascending sort:")
    43 	SortIntegers(array, 10, Sort_Ascending)
    44 	PrintIntegers(array, 10)
    45 	
    46 	PrintToServer("Testing descending sort:")
    47 	SortIntegers(array, 10, Sort_Descending)
    48 	PrintIntegers(array, 10)
    49 	
    50 	return Plugin_Handled
    51 }
    52 
    53 /**************************
    54  * Float comparison tests *
    55  **************************/
    56 
    57 PrintFloats(const Float:array[], size)
    58 {
    59 	for (new i=0; i<size; i++)
    60 	{
    61 		PrintToServer("array[%d] = %f", i, array[i])
    62 	}
    63 }
    64 
    65 public Action:Command_TestSortFloats(args)
    66 {
    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}
    68 	
    69 	PrintToServer("Testing ascending sort:")
    70 	SortFloats(array, 10, Sort_Ascending)
    71 	PrintFloats(array, 10)
    72 	
    73 	PrintToServer("Testing descending sort:")
    74 	SortFloats(array, 10, Sort_Descending)
    75 	PrintFloats(array, 10)
    76 	
    77 	return Plugin_Handled
    78 }
    79 
    80 public Custom1DSort(elem1, elem2, const array[], Handle:hndl)
    81 {
    82 	new Float:f1 = Float:elem1
    83 	new Float:f2 = Float:elem2
    84 	if (f1 > f2)
    85 	{
    86 		return -1;
    87 	} else if (f1 < f2) {
    88 		return 1;
    89 	}
    90 	
    91 	return 0;
    92 }
    93 
    94 public Action:Command_TestSort1D(args)
    95 {
    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}
    97 	
    98 	SortCustom1D(_:array, 10, Custom1DSort)
    99 	PrintFloats(array, 10)
   100 	
   101 	return Plugin_Handled
   102 }
   103 
   104 /***************************
   105  * String comparison tests *
   106  ***************************/
   107 
   108 PrintStrings(const String:array[][], size)
   109 {
   110 	for (new i=0; i<size; i++)
   111 	{
   112 		PrintToServer("array[%d] = %s", i, array[i])
   113 	}
   114 }
   115 
   116 public Action:Command_TestSortStrings(args)
   117 {
   118 	new String:strarray[][] = 
   119 		{
   120 			"faluco",
   121 			"bailopan",
   122 			"pm onoto",
   123 			"damaged soul",
   124 			"sniperbeamer",
   125 			"sidluke",
   126 			"johnny got his gun",
   127 			"gabe newell",
   128 			"hello",
   129 			"WHAT?!"
   130 		}
   131 		
   132 	PrintToServer("Testing ascending sort:")
   133 	SortStrings(strarray, 10, Sort_Ascending)
   134 	PrintStrings(strarray, 10)
   135 	
   136 	PrintToServer("Testing descending sort:")
   137 	SortStrings(strarray, 10, Sort_Descending)
   138 	PrintStrings(strarray, 10)
   139 	
   140 	return Plugin_Handled
   141 }
   142 
   143 public Custom2DSort(String:elem1[], String:elem2[], String:array[][], Handle:hndl)
   144 {
   145 	return strcmp(elem1, elem2)
   146 }
   147 
   148 public Action:Command_TestSort2D(args)
   149 {
   150 	new String:array[][] = 
   151 		{
   152 			"faluco",
   153 			"bailopan",
   154 			"pm onoto",
   155 			"damaged soul",
   156 			"sniperbeamer",
   157 			"sidluke",
   158 			"johnny got his gun",
   159 			"gabe newell",
   160 			"hello",
   161 			"WHAT?!"
   162 		}
   163 	
   164 	SortCustom2D(_:array, 10, Custom2DSort)
   165 	PrintStrings(array, 10)
   166 	
   167 	return Plugin_Handled
   168 }
   169 
   170 /*******************
   171  * ADT ARRAY TESTS *
   172  *******************/
   173 // Int and floats work the same as normal comparisions. Strings are direct
   174 // comparisions with no hacky memory stuff like Pawn arrays.
   175 
   176 PrintADTArrayIntegers(Handle:array)
   177 {
   178 	new size = GetArraySize(array);
   179 	for (new i=0; i<size;i++)
   180 	{
   181 		PrintToServer("array[%d] = %d", i, GetArrayCell(array, i));	
   182 	}
   183 }
   184 
   185 public Action:Command_TestSortADTInts(args)
   186 {
   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);
   198 	
   199 	PrintToServer("Testing ascending sort:")
   200 	SortADTArray(array, Sort_Ascending, Sort_Integer)
   201 	PrintADTArrayIntegers(array)
   202 	
   203 	PrintToServer("Testing descending sort:")
   204 	SortADTArray(array, Sort_Descending, Sort_Integer)
   205 	PrintADTArrayIntegers(array)
   206 	
   207 	return Plugin_Handled
   208 
   209 }
   210 
   211 PrintADTArrayFloats(Handle:array)
   212 {
   213 	new size = GetArraySize(array);
   214 	for (new i=0; i<size;i++)
   215 	{
   216 		PrintToServer("array[%d] = %f", i, float:GetArrayCell(array, i));	
   217 	}
   218 }
   219 
   220 public Action:Command_TestSortADTFloats(args)
   221 {
   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);
   233 	
   234 	PrintToServer("Testing ascending sort:")
   235 	SortADTArray(array, Sort_Ascending, Sort_Float)
   236 	PrintADTArrayFloats(array)
   237 	
   238 	PrintToServer("Testing descending sort:")
   239 	SortADTArray(array, Sort_Descending, Sort_Float)
   240 	PrintADTArrayFloats(array)
   241 	
   242 	return Plugin_Handled
   243 }
   244 
   245 PrintADTArrayStrings(Handle:array)
   246 {
   247 	new size = GetArraySize(array);
   248 	decl String:buffer[64];
   249 	for (new i=0; i<size;i++)
   250 	{
   251 		GetArrayString(array, i, buffer, sizeof(buffer));
   252 		PrintToServer("array[%d] = %s", i, buffer);	
   253 	}
   254 }
   255 
   256 public Action:Command_TestSortADTStrings(args)
   257 {
   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?!");
   269 	
   270 	PrintToServer("Testing ascending sort:")
   271 	SortADTArray(array, Sort_Ascending, Sort_String)
   272 	PrintADTArrayStrings(array)
   273 	
   274 	PrintToServer("Testing descending sort:")
   275 	SortADTArray(array, Sort_Descending, Sort_String)
   276 	PrintADTArrayStrings(array)
   277 	
   278 	return Plugin_Handled
   279 }
   280 
   281 public ArrayADTCustomCallback(index1, index2, Handle:array, Handle:hndl)
   282 {
   283 	decl String:buffer1[64], String:buffer2[64];
   284 	GetArrayString(array, index1, buffer1, sizeof(buffer1));
   285 	GetArrayString(array, index2, buffer2, sizeof(buffer2));
   286 	
   287 	return strcmp(buffer1, buffer2);
   288 }
   289 
   290 public Action:Command_TestSortADTCustom(args)
   291 {
   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?!");
   303 	
   304 	PrintToServer("Testing custom sort:")
   305 	SortADTArrayCustom(array, ArrayADTCustomCallback)
   306 	PrintADTArrayStrings(array);
   307 }