#!/usr/bin/ruby

func binary_search(a,i) {

    var l = 0;
    var h = a.end;

    while (h >= l) {
        var mid = (h+l / 2 -> int);
        a[mid] > i && (h = mid-1; next);
        a[mid] < i && (l = mid+1; next);
        return mid;
    }

    return -1;
}


##
# Testing
##

var min = 1;
var max = 99;

var a = @(min..max)

for i in [@|(min .. min+5), @|(max-5 .. max)] {
    say i
    assert_eq(binary_search(a, i), i-1)
}

say "Test passed!"