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

fun x1 {
    case $1 {
        a(?!x)x { echo yes }
        .* { echo no }
    }
}
match x1 a no
match x1 aa no
match x1 ax no
match x1 axx no
match x1 aax no

fun x3 {
    case $1 {
        x(?!(a|b)).* { echo yes }
        .* { echo no }
    }
}
match x3 x yes
match x3 xa no
match x3 xb no
match x3 xax no
match x3 xbx no
match x3 xxa yes
match x3 xxb yes
match x3 xfoobar yes

fun x4 {
    case $1 {
        x(?!a).* { echo yes }
        .* { echo no }
    }
}
match x4 x yes
match x4 xa no
match x4 xy yes

fun x5 {
    case $1 {
        (?!foo)... { echo yes }
        .* { echo no }
    }
}
match x5 x no
match x5 xy no
match x5 xyz yes
match x5 foo no
match x5 abc yes
