echo begin

case foo {
    f(?=o)oo {}
    .* { echo fail 1 }
}

case foo {
    fo(?=x)o { echo fail 2 }
    .* { }
}

fun match {
    set res = $($1 $2)
    if [ $res != $3 ] {
        echo "match $1 $2: expected $3, got $res"
    }
}

fun x0 {
    case $1 {
        a(?=b). { echo yes }
        .* { echo no }
    }
}
match x0 aa no
match x0 aaa no
match x0 ab yes
echo x0

fun x1 {
    case $1 {
        x(?=foo)(?=...bar).* { echo yes }
        .* { echo no }
    }
}
match x1 xfoobar yes
match x1 xfoobar_some_more_stuff yes
match x1 x___bar no
match x1 xfoo___ no
match x1 xfoo    no
echo x1

fun x2 {
    case $1 {
        (?=foo).*(?=bar).* { echo yes }
        .* { echo no }
    }
}
match x2 foobar yes
match x2 foobarbaz yes
match x2 barfoo no
match x2 foobaz no
match x2 foo_stuff_bar yes
match x2 foo_stuff_bar_more_stuff yes
echo x2

fun x3 {
    case $1 {
        (?=abc).*(?=cde).* { echo yes }
        .* { echo no }
    }
}
match x3 abc_cde yes
match x3 abcde yes
match x3 abcdef yes
match x3 abde no
echo x3

fun x4 {
    case $1 {
        (?=((a.)*e))(?=((a..)*e)).* { echo yes }
        .* { echo no }
    }
}
match x4 '' no
match x4 e yes
match x4 a no
match x4 ab no
match x4 abe no
match x4 abaaabe yes
match x4 aaaaaae yes
match x4 aaaaaaae no
match x4 aaaaaaaae no
match x4 aaaaaaaaae no
match x4 aaaaaaaaaae no
match x4 aaaaaaaaaaae no
match x4 aaaaaaaaaaaae yes
echo x4

fun x5 {
    case $1 {
        (?=(a.)*e)(?=(a..)*e)(?=(a....)*e).*e { echo yes }
        .* { echo no }
    }
}
match x5 e yes
match x5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaae no
match x5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaae yes
match x5 a.aaaaaaaaaaaaaaaaaaaaaaaaaaa.e yes
match x5 .aaaaaaaaaaaaaaaaaaaaaaaaaaaaae no
match x5 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaae no
echo x5

echo done
