This page tests to make sure my implementation of sort works for the
Processing.js library.
//Test written by Andor Salga
int testsPassed = 0;
boolean failed = false;
PFont font = loadFont("courier");
textFont(font);
void setup()
{
size(400,400);
fill(0);
// FLOATS
float[] f1 = { 3.4, 3.6, 2, 0, 7.1 };
float[] rf1 = {0.0, 2.0, 3.4, 3.6, 7.1};
float[] f2 = {0.0};
float[] rf2 = {0.0};
float[] f3 = {5,4,3,2,1};
float[] rf3 = {1,2,3,4,5};
float[] f4 = {4.4, 3.3, 2.2, 1.1};
float[] rf4 = {1.1, 2.2, 3.3, 4.4};
float[] f5_4 = {6.6, 4.4, 3.3, 9.9, 7.7, 4.4, 1.1};
float[] rf5_4 = {3.3, 4.4, 6.6, 9.9, 7.7, 4.4, 1.1};
float[] f6_1 = {6.6, 4.4, 3.3, 9.9, 7.7, 4.4, 1.1};
float[] rf6_1 = {6.6, 4.4, 3.3, 9.9, 7.7, 4.4, 1.1 };
float[] f7_5 = {4.4, 3.3, 1.1, 6.6, 8.8};
float[] rf7_5 = {1.1, 3.3, 4.4, 6.6, 8.8};
float[] f8 = {1,2,3,4};
float[] rf8 = {1,2,3,4};
float[] f9_3 = {1,2,3,4,5};
float[] rf9_3 = {1,2,3,4,5};
float[] f10 = { 7.7, 3.1, 9.9, 6.5, 9.8, 3.14, 3.4, 5.6};
float[] rf10 = {3.1, 3.14, 3.4, 5.6, 6.5, 7.7, 9.8, 9.9};
float[] f11 = {9.0, -7.3, 0.0, 5.1, 9.34, 2.8, 1, 8, 3, 0};
float[] rf11 = {-7.3, 0.0, 0.0, 1.0, 2.8, 3.0, 5.1, 8.0, 9.0, 9.34};
float[] f12 = {};
float[] rf12 = {};
float[] f13_9 = {8,4,6,7,9,0,-9,2,4,1,1,1,1,1,1,1,1};
float[] rf13_9 = {-9,0,2,4,4,6,7,8,9,1,1,1,1,1,1,1,1};
// INTS
int[] i1 = {1,2,3,4,5};
int[] ri1 = {1,2,3,4,5};
int[] i2_3 = {1,2,3,4,5};
int[] ri2_3 = {1,2,3,4,5};
int[] i3 = {5,4,3,2,1};
int[] ri3 = {1,2,3,4,5};
int[] i4 = {2,7,4,8,1,2,9};
int[] ri4 = {1,2,2,4,7,8,9};
int[] i5_4 = {2,7,4,8,1,2,9};
int[] ri5_4 = {2,4,7,8,1,2,9};
int[] i6 = {4,3,1,2,3,4,1,2,2,3,4,1};
int[] ri6 = {1,1,1,2,2,2,3,3,3,4,4,4};
int[] i7 = {1,1,1};
int[] ri7 = {1,1,1};
int[] i8_3 = {1,2,1,5,6,7};
int[] ri8_3 = {1,1,2,5,6,7};
int[] i9 = {0};
int[] ri9 = {0};
int[] i10 = {};
int[] ri10 = {};
int[] i11_8 = {5,1,9,7,3,4,5,6,1};
int[] ri11_8 = {1,3,4,5,5,6,7,9,1};
int[][] i12 = {{3,2,1},{4,5,6}};
int[] ri12 = {1,2,3};
int[][] i13_5 = {{5,8,1,3,9},{4,7,8,9,2},{3,1,7,9,3},{7,4,9,7,9,0,3}};
int[] ri13_5 = {4,7,7,9,9,0,3};
// STRINGS
String[] s1 = {"deer", "elephant", "bear", "aardvark", "cat"};
String[] rs1 = {"aardvark", "bear", "cat", "deer", "elephant"};
String[] s2_3 = {"deer", "elephant", "bear", "aardvark", "cat" };
String[] rs2_3 = {"bear", "deer", "elephant", "aardvark", "cat" };
String[] s3 = {"A", "B", "C", "D"};
String[] rs3 = {"A", "B", "C", "D"};
String[] s4 = {"Z","Y","X"};
String[] rs4 = {"X","Y","Z"};
String[] s5 = {"A", "b", "C", "a", "c", "B"};
String[] rs5 = {"A", "B", "C", "a", "b", "c"}; //case sensitive
//String[] rs5 = {"A", "a", "b", "B", "C", "c"}; case insensitive
String[] s6 = {"Andor","DPS909","andor","salga","Salga"};
String[] rs6 = {"Andor","DPS909","Salga","andor","salga"};
//String[] rs6 = {"Andor","andor","DPS909","salga","Salga"};
String[] s7 = {"abc","def","xyz","qrs","ghi","lmn"};
String[] rs7 = {"abc","def","ghi","lmn","qrs","xyz"};
String[] s8_4 = {"abc","def","xyz","qrs","ghi","lmn"};
String[] rs8_4 = {"abc","def","qrs","xyz","ghi","lmn"};
String[][] s9 = {
{"ABC","YYX"},
{"123","456","993","42","67"},
{"XYZ"}
};
String[] rs9 = {"123","42","456","67","993"};
String[] s10 = {"#","*","@","(","$","a","5","~"};
String[] rs10 = {"#","$","(","*","5","@","a","~"};
String[] s11 = {};
String[] rs11 = {};
String[] s12 ={"6.3","1.7","-9.5","2.5","4.4","1.5", "7", "0.5","-8.4"};
String[] rs12 = {"-8.4", "-9.5", "0.5", "1.5","1.7","2.5", "4.4", "6.3", "7"};
String[] s13 = {"a"};
String[] rs13 = {"a"};
String[] s14 = {"a","b"};
String[] rs14 = {"a","b"};
String[] s15 = {"b","a"};
String[] rs15 = {"a","b"};
String[] s16 = {"a","b","c","b","a"};
String[] rs16 = {"a","a","b","b","c"};
if(
arraysEquals(sort(s1), rs1) &&
arraysEquals(sort(s2_3,3), rs2_3) &&
arraysEquals(sort(s3), rs3) &&
arraysEquals(sort(s4), rs4) &&
arraysEquals(sort(s5), rs5) &&
arraysEquals(sort(s6), rs6) &&
arraysEquals(sort(s7), rs7) &&
arraysEquals(sort(s8_4,4), rs8_4) &&
arraysEquals(sort(s9[1]), rs9) &&
arraysEquals(sort(s10), rs10) &&
arraysEquals(sort(s11), rs11) &&
arraysEquals(sort(s12), rs12) &&
arraysEquals(sort(s13), rs13) &&
arraysEquals(sort(s14), rs14) &&
arraysEquals(sort(s15), rs15) &&
arraysEquals(sort(s16), rs16) &&
arraysEquali(sort(i1), ri1) &&
arraysEquali(sort(i2_3), ri2_3) &&
arraysEquali(sort(i3), ri3) &&
arraysEquali(sort(i4), ri4) &&
arraysEquali(sort(i5_4,4), ri5_4) &&
arraysEquali(sort(i6), ri6) &&
arraysEquali(sort(i7), ri7) &&
arraysEquali(sort(i8_3), ri8_3) &&
arraysEquali(sort(i9), ri9) &&
arraysEquali(sort(i10), ri10) &&
arraysEquali(sort(i11_8,8), ri11_8) &&
arraysEquali(sort(i12[0]), ri12) &&
arraysEquali(sort(i13_5[3],5), ri13_5) &&
// FLOATS
arraysEqualf(sort(f1), rf1) &&
arraysEqualf(sort(f2), rf2) &&
arraysEqualf(sort(f3), rf3) &&
arraysEqualf(sort(f4), rf4) &&
arraysEqualf(sort(f5_4, 4), rf5_4) &&
arraysEqualf(sort(f6_1, 1), rf6_1) &&
arraysEqualf(sort(f7_5, 5), rf7_5) &&
arraysEqualf(sort(f8), rf8) &&
arraysEqualf(sort(f9_3), rf9_3) &&
arraysEqualf(sort(f10), rf10) &&
arraysEqualf(sort(f11), rf11) &&
arraysEqualf(sort(f12), rf12) &&
arraysEqualf(sort(f13_9,9), rf13_9)
)
{
text("All " + testsPassed + " tests have passed.",20,20)
}
else
{
text("failed on test " + (testsPassed+1), 20, 20);
}
}
void printArray(arr)
{
for(var i =0 ; i < arr.length; i++)
{
text("[" + i + "]" + " " + arr[i], 20, (i*10) +40);
}
}
boolean arraysEquali(int[] i1, int[] i2)
{
if(!failed && i1.length != i2.length)
{
return false;
}
for(int i = 0; i < i1.length; i++)
{
if(i1[i] != i2[i]) return false;
}
testsPassed++;
return true;
}
boolean arraysEqualf(float[] f1, float[] f2)
{
if(!failed && f1.length != f2.length)
{
return false;
}
for(int i=0; i< f1.length; i++)
{
if(f1[i] != f2[i])
{
return false;
}
}
testsPassed++;
return true;
}
boolean stringsEqual(String str1, String str2)
{
if(str1.length() != str2.length())
{
return false;
}
for(int i = 0; i < str1.length(); i++)
{
char ai = str1[i];
char bi = str2[i];
if( ai != bi )
{
return false;
}
}
return true;
}
boolean arraysEquals(String[] a, String[] b)
{
if(!failed && a.length != b.length)
{
return false;
}
for(int i=0; i < a.length; i++)
{
if(stringsEqual(a[i],b[i]) == false )
{
return false;
}
}
testsPassed++;
return true;
}