Шаблоны 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 символов, поэтому с современным компьютером это будет очень быстро.