Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
Also test "g~ap".

STARTTEST
:so small.vim
:if !has("multi_byte")
: e! test.ok
: w! test.out
: qa!
:endif
:set enc=utf8
ggdG:
:
:function! Ch(a, op, b, expected)
:  if eval(printf('"%s" %s "%s"', a:a, a:op, a:b)) != a:expected
:    call append(line('$'), printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
:  else
:    let b:passed += 1
:  endif
:endfunction
:
:function! Chk(a, b, result)
:  if a:result == 0
:    call Ch(a:a, '==?', a:b, 1)
:    call Ch(a:a, '!=?', a:b, 0)
:    call Ch(a:a, '<=?', a:b, 1)
:    call Ch(a:a, '>=?', a:b, 1)
:    call Ch(a:a, '<?', a:b, 0)
:    call Ch(a:a, '>?', a:b, 0)
:  elseif a:result > 0
:    call Ch(a:a, '==?', a:b, 0)
:    call Ch(a:a, '!=?', a:b, 1)
:    call Ch(a:a, '<=?', a:b, 0)
:    call Ch(a:a, '>=?', a:b, 1)
:    call Ch(a:a, '<?', a:b, 0)
:    call Ch(a:a, '>?', a:b, 1)
:  else
:    call Ch(a:a, '==?', a:b, 0)
:    call Ch(a:a, '!=?', a:b, 1)
:    call Ch(a:a, '<=?', a:b, 1)
:    call Ch(a:a, '>=?', a:b, 0)
:    call Ch(a:a, '<?', a:b, 1)
:    call Ch(a:a, '>?', a:b, 0)
:  endif
:endfunction
:
:function! Check(a, b, result)
:  call Chk(a:a, a:b, a:result)
:  call Chk(a:b, a:a, -a:result)
:endfunction
:
:function! LT(a, b)
:  call Check(a:a, a:b, -1)
:endfunction
:
:function! GT(a, b)
:  call Check(a:a, a:b, 1)
:endfunction
:
:function! EQ(a, b)
:  call Check(a:a, a:b, 0)
:endfunction
:
:let b:passed=0
:call EQ('', '')
:call LT('', 'a')
:call EQ('abc', 'abc')
:call EQ('Abc', 'abC')
:call LT('ab', 'abc')
:call LT('AB', 'abc')
:call LT('ab', 'aBc')
:call EQ('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xb9\xd0\xa6\xd0\xa3\xd0\xba\xd0\x95\xd0\xbd')
:call LT('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xaf\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd')
:call EQ('\xe2\x84\xaa', 'k')
:call LT('\xe2\x84\xaa', 'kkkkkk')
:call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
:call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
:call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
:call EQ('Abc\x80', 'AbC\x80')
:call LT('Abc\x80', 'AbC\x81')
:call LT('Abc', 'AbC\x80')
:call LT('abc\x80DEF', 'abc\x80def')  " case folding stops at the first bad character
:call LT('\xc3XYZ', '\xc3xyz')
:call EQ('\xef\xbc\xba', '\xef\xbd\x9a')  " FF3A (upper), FF5A (lower)
:call GT('\xef\xbc\xba', '\xef\xbc\xff')  " first string is ok and equals \xef\xbd\x9a after folding, second string is illegal and was left unchanged, then the strings were bytewise compared
:call LT('\xc3', '\xc3\x83')
:call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
:for n in range(0x60, 0xFF) | call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) | endfor
:for n in range(0x80, 0xBF) | call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
:for n in range(0xC0, 0xFF) | call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
:call append(0, printf('%d checks passed', b:passed))
:"
:" test that g~ap changes one paragraph only.
:new
iabcd

defggg0g~ap:let lns = getline(1,3)
:q!
:call append(line('$'), lns)
:"
:wq! test.out
ENDTEST

