Release v0.6.21: skip unchanged layouts during conversion

This commit is contained in:
2026-10-31 11:39:19 +02:00
parent 4c5275631c
commit 64a04b4382
11 changed files with 52 additions and 16 deletions
+16
View File
@@ -337,6 +337,22 @@ int main(int argc, char **argv)
require(ks::convertTo(L"ghbdtn", layouts, 1, 0) == L"привет", "hint conversion");
require(ks::convertTo(L"привет", layouts, 1, 1) == L"привет", "same source is unchanged");
require(ks::convertTo(L"?", layouts, 1, 0) == L",", "punctuation conversion");
require(ks::nextConversionLayout(L"рф", layouts, {0, 1, 2}, 1) == 0 &&
ks::convertTo(L"рф", layouts, 0, 1) == L"ha",
"cycle skips unchanged Russian to Ukrainian and wraps to English");
require(ks::nextConversionLayout(L"шььш", layouts, {0, 2, 1}, 2) == 0 &&
ks::convertTo(L"шььш", layouts, 0, 2) == L"immi",
"cycle skips unchanged Ukrainian to Russian");
require(ks::nextConversionLayout(L"і", layouts, {0, 2, 1}, 2) == 1,
"cycle keeps the next language when text changes");
require(ks::nextConversionLayout(L"ha", layouts, {0, 1, 2}, 0) == 1,
"cycle preserves configured order for changed text");
require(ks::nextConversionLayout(L"рф", layouts, {1, 2}, 1) == 2,
"cycle does not use disabled English when all candidates are unchanged");
require(ks::nextConversionLayout(L"123 ", layouts, {0, 1, 2}, 0) == 1,
"unchanged digits finish after a bounded cycle");
require(ks::nextConversionLayout(L"рф", layouts, {2, 0}, 1) == 0,
"source outside cycle still skips unchanged candidates");
require(ks::cycleCase(L"hello world") == L"Hello World", "title case");
require(ks::cycleCase(L"Hello World") == L"HELLO WORLD", "upper case");
require(ks::cycleCase(L"ПРИВІТ") == L"привіт", "Unicode lower case");