use strict;
use warnings;
use utf8;
use open qw( :encoding(UTF-8) :std );
use Test::More tests => 26;
use Unicode::Util qw( grapheme_index );
# Simple - with just a single char
is grapheme_index('Hello World', 'H'), 0, 'One char, at beginning';
is grapheme_index('Hello World', 'l'), 2, 'One char, in the middle';
is grapheme_index('Hello World', 'd'), 10, 'One char, in the end';
is grapheme_index('Hello World', 'x'), -1, 'One char, no match';
is grapheme_index('Hello World', 'l', 0), 2, 'One char, find first match, pos = 0';
is grapheme_index('Hello World', 'l', 2), 2, '- 1. match again, pos @ match';
is grapheme_index('Hello World', 'l', 3), 3, '- 2. match';
is grapheme_index('Hello World', 'l', 4), 9, '- 3. match';
is grapheme_index('Hello World', 'l', 10), -1, '- no more matches';
# Simple - with a string
is grapheme_index('Hello World', 'Hello'), 0, 'Substr, at beginning';
is grapheme_index('Hello World', 'o W'), 4, 'Substr, in the middle';
is grapheme_index('Hello World', 'World'), 6, 'Substr, at the end';
is grapheme_index('Hello World', 'low'), -1, 'Substr, no match';
is grapheme_index('Hello World', 'Hello World'), 0, 'Substr eq Str';
# Empty strings
is grapheme_index('Hello World', ''), 0, 'Substr is empty';
is grapheme_index('', ''), 0, 'Both strings are empty';
is grapheme_index('', 'Hello'), -1, 'Only main-string is empty';
is grapheme_index('Hello', '', 3), 3, 'Substr is empty, pos within str';
is grapheme_index('Hello', '', 5), 5, 'Substr is empty, pos at end of str';
is grapheme_index('Hello', '', 999), 5, 'Substr is empty, pos > length of str';
# More difficult strings
is grapheme_index('ababcabcd', 'abcd'), 5, 'Start-of-substr matches several times';
is grapheme_index('uuúuúuùù', 'úuù'), 4, 'Accented chars';
is grapheme_index('Ümlaut', 'Ü'), 0, 'Umlaut';
is grapheme_index(1234, 3), 2, 'index on non-strings';
is grapheme_index(1023, '0'), 1, 'grapheme_index($str, "0") works';
is grapheme_index(1023, 0), 1, 'grapheme_index($str, 0) works';