Implement the Indic grapheme breaking rules

This commit is contained in:
Alejandro Alonso
2022-01-05 16:18:54 -08:00
parent a0693c4649
commit 4a451829f8
7 changed files with 495 additions and 98 deletions

View File

@@ -2280,4 +2280,58 @@ StringTests.test("NormalizationCheck/Opaque")
#endif
}
func expectBidirectionalCount(_ count: Int, _ string: String) {
var i = 0
var index = string.endIndex
while index != string.startIndex {
i += 1
string.formIndex(before: &index)
}
expectEqual(i, count)
}
StringTests.test("GraphemeBreaking.Indic Sequences") {
let test1 = "\u{0915}\u{0924}" // 2
expectEqual(2, test1.count)
expectBidirectionalCount(2, test1)
let test2 = "\u{0915}\u{094D}\u{0924}" // 1
expectEqual(1, test2.count)
expectBidirectionalCount(1, test2)
let test3 = "\u{0915}\u{094D}\u{094D}\u{0924}" // 1
expectEqual(1, test3.count)
expectBidirectionalCount(1, test3)
let test4 = "\u{0915}\u{094D}\u{200D}\u{0924}" // 1
expectEqual(1, test4.count)
expectBidirectionalCount(1, test4)
let test5 = "\u{0915}\u{093C}\u{200D}\u{094D}\u{0924}" // 1
expectEqual(1, test5.count)
expectBidirectionalCount(1, test5)
let test6 = "\u{0915}\u{093C}\u{094D}\u{200D}\u{0924}" // 1
expectEqual(1, test6.count)
expectBidirectionalCount(1, test6)
let test7 = "\u{0915}\u{094D}\u{0924}\u{094D}\u{092F}" // 1
expectEqual(1, test7.count)
expectBidirectionalCount(1, test7)
let test8 = "\u{0915}\u{094D}\u{0061}" // 2
expectEqual(2, test8.count)
expectBidirectionalCount(2, test8)
let test9 = "\u{0061}\u{094D}\u{0924}" // 2
expectEqual(2, test9.count)
expectBidirectionalCount(2, test9)
let test10 = "\u{003F}\u{094D}\u{0924}" // 2
expectEqual(2, test10.count)
expectBidirectionalCount(2, test10)
}
runAllTests()