Andor Salga

sort() test

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;
}