<script src="../resources/magnitude-perf.js"></script>
<script>
function setupFunction(magnitude)
{
    array = [];
    for (var i = 0; i < magnitude; i++) {
        array[i] = i;
    }
}

function binarySearch(arry, val) {
    if (!arry.length)
        return -1;
    return help(arry, val, 0, arry.length - 1);
}

function help(arry, val, start, end) {
    if (end == start) {
        if (arry[end] == val)
            return end;
        else
            return -1;
    }

    var index = start + Math.floor((end - start) / 2);
    if (arry[index] == val)
        return index;

    if (arry[index] > val) {
        if (index == start)
            return -1;
        return arguments.callee(arry, val, start, index - 1);
    }

    if (index == end)
        return -1;

    return arguments.callee(arry, val, index + 1, end);
}

function test(magnitude)
{
    binarySearch(array, 0);
}

Magnitude.description("Tests that binary search over an array is logarithmic.");
Magnitude.run(setupFunction, test, Magnitude.LOGARITHMIC);
</script>
