#!/usr/bin/ruby

define r = /(....)/
define s = '1234567'

assert_eq('4567', r.match(s, 3)[0] )
assert_eq('1234', r.match(s, 0)[0] )
assert_eq('1234', r.match(s, -1)[0] )
assert_eq('1234', r.match(s, 0.7)[0] )

# No matching when pos >= length(str)
#assert_eq('1234', r.match(s, 11)[0] )
#assert_eq('1234', r.match(s, 7)[0] )
#assert_eq('1234', r.match(s, 8)[0] )

do {
    var captures = []
    var str = "foo -- bar -- baz"
    var pos = 0

    while (/(\w+)/.match(str, pos)) {|m|
        captures << "#{m}"
        pos = m.pos[1]
    }

    assert_eq(captures, ['foo', 'bar', 'baz'])
}

say "** Test passed!"