Шаблоны Unicode для модульных тестов

Мне нужны некоторые тестовые строки Utf32, чтобы реализовать некоторый код манипуляции с перекрестной платформой. Мне нужен набор тестовых строк, которые используют кодировки utf32 ↔ utf16 ↔ utf8 для проверки того, что символы вне BMP могут быть преобразованы из utf32 через суррогаты utf16 через utf8 и обратно. должным образом.

И я всегда нахожу его немного более элегантным, если строки, о которых идет речь, не просто состоят из случайных байтов, но фактически имеют смысл на (разных) языках, которые они кодируют.

Ответ 1

Хотя это не совсем то, о чем вы просили, я всегда нашел этот тестовый документ полезным.

http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt

Тот же сайт предлагает это

http://www.cl.cam.ac.uk/~mgk25/ucs/examples/quickbrown.txt

... которые являются эквивалентами английского текста "Quick brown fox", в котором используются все используемые символы для разных языков. Эта страница относится к большему списку "панграмм", которые раньше были в Википедии, но, по-видимому, там были удалены. Он по-прежнему доступен здесь:

http://clagnut.com/blog/2380/

Ответ 2

Хммм

Вы можете найти множество случайных данных по googling (и увидеть правую колонку для таких вопросов, как эти на SO...)

Тем не менее, я рекомендую вам в значительной степени построить ваши тестовые строки в виде массива байтов. Речь идет не о "каких данных", а о том, что unicode обрабатывается правильно.

например. вы захотите убедиться, что одинаковые строки в разных нормализованных формах (т.е. даже если не в канонической форме) по-прежнему сравниваются.

Вам нужно проверить, что определение длины строки является надежным (и распознает одиночные, двойные, тройные и четырехкратные байтовые символы). Вы захотите проверить, что перемещение строки от начала до конца отличает одну и ту же логику. Более целенаправленные тесты для случайного доступа к символам Юникода.

Это все, что вы знали, я уверен. Я просто излагаю их, чтобы напомнить вам, что вам нужны тестовые данные, удовлетворяющие именно краям, логическим свойствам, присущим Unicode.

Только тогда у вас будут соответствующие тестовые данные.


Помимо этой области (техническая правильная обработка Юникода) - это фактическая локализация (сопоставление, преобразование кодировки и т.д.). Я имею в виду турецкий тест

Вот полезные ссылки:

Ответ 3

Если вам не нужно что-либо столь же обширное, как http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt, следующий инструмент полезен для создания нескольких тестовых мест представляющих интерес:

http://rishida.net/tools/conversion/

Например:

// point    UTF-16      UTF-8
// U+007A   007A        7A
// U+6C34   6C34        E6 B0 B4
// U+10000  D800 DC00   F0 90 80 80
// U+1D11E  D834 DD1E   F0 9D 84 9E
// U+10FFFD DBFF DFFD   F4 8F BF BD

Ответ 4

Вы можете попробовать это (есть несколько предложений на русском, греческом, китайском и т.д. для проверки Unicode):

http://www.madore.org/~david/misc/unitest/

Ответ 5

Чтобы действительно проверить все возможные преобразования между форматами, в противоположность преобразованиям символов (например, towupper(), towlower()), вы должны проверить все символы. Следующий цикл дает вам все:

for(wint_t c(0); c < 0x110000; ++c)
{
    if(c >= 0xD800 && c <= 0xDFFF)
    {
        continue;
    }
    // here 'c' is any one Unicode character in UTF-32
    ...
}

Таким образом, вы можете удостовериться, что вы ничего не пропустите (то есть 100% полный тест). Это всего лишь 1112 065 символов, поэтому с современным компьютером это будет очень быстро.