mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
211 lines
7.9 KiB
Swift
211 lines
7.9 KiB
Swift
// RUN: %target-run-simple-swift
|
||
// REQUIRES: executable_test
|
||
// UNSUPPORTED: freestanding
|
||
|
||
import StdlibUnittest
|
||
|
||
var CharacterPropertiesTests = TestSuite("StringTests")
|
||
|
||
CharacterPropertiesTests.test("ASCII queries") {
|
||
for cu in (0 as UInt32)...(0x7F as UInt32) {
|
||
let c = Character(Unicode.Scalar(cu)!)
|
||
expectTrue(c.isASCII)
|
||
expectEqual(cu, UInt32(c.asciiValue!))
|
||
}
|
||
expectTrue(Character("\r\n").isASCII)
|
||
expectEqual(Character("\n").asciiValue, Character("\r\n").asciiValue)
|
||
|
||
expectFalse(Character("⅚").isASCII)
|
||
expectFalse(Character("“").isASCII)
|
||
expectFalse(Character("e\u{301}").isASCII)
|
||
}
|
||
|
||
CharacterPropertiesTests.test("Hex queries") {
|
||
let hexDigits: Array<Character> = [
|
||
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", // 0-9
|
||
"a", "b", "c", "d", "e", "f", // 10-15
|
||
"A", "B", "C", "D", "E", "F", // 16-21
|
||
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", // 22-31
|
||
"A", "B", "C", "D", "E", "F", // 32-37
|
||
"a", "b", "c", "d", "e", "f", // 38-43
|
||
]
|
||
|
||
// Ensure below loop logic is correct with a couple hard-coded checks
|
||
expectEqual(1, Character("1").hexDigitValue!)
|
||
expectEqual(2, Character("2").hexDigitValue!)
|
||
expectEqual(11, Character("B").hexDigitValue!)
|
||
expectEqual(12, Character("c").hexDigitValue!)
|
||
expectEqual(14, Character("e").hexDigitValue!)
|
||
expectEqual(15, Character("f").hexDigitValue!)
|
||
|
||
for i in hexDigits.indices {
|
||
let hexValue = hexDigits[i].hexDigitValue!
|
||
switch i {
|
||
case 0...15: expectEqual(i, hexValue)
|
||
case 16...21: expectEqual(i-6, hexValue)
|
||
case 22...37: expectEqual(i-22, hexValue)
|
||
case 38...43: expectEqual(i-28, hexValue)
|
||
default: print(i); fatalError("unreachable")
|
||
}
|
||
}
|
||
|
||
expectNil(Character("㊈").hexDigitValue)
|
||
expectNil(Character("Ⅴ").hexDigitValue)
|
||
expectNil(Character("7\u{301}").hexDigitValue)
|
||
}
|
||
|
||
CharacterPropertiesTests.test("Numbers") {
|
||
// Some hard coded tests
|
||
expectTrue(Character("⅚").isNumber)
|
||
expectTrue(Character("5️⃣").isNumber)
|
||
expectTrue(Character("𝟠").isNumber)
|
||
expectTrue(Character("㊈").isNumber)
|
||
expectTrue(Character("7").isNumber)
|
||
expectTrue(Character("𐹾").isNumber) // RUMI FRACTION 2/3
|
||
|
||
expectFalse(Character("A").isNumber)
|
||
expectFalse(Character("Z").isNumber)
|
||
}
|
||
|
||
CharacterPropertiesTests.test("Whole Numbers") {
|
||
// Random smattering of hard-coded tests
|
||
expectEqual(0, Character("↉").wholeNumberValue) // baseball scoring
|
||
expectEqual(0, Character("𝟶").wholeNumberValue) // math monospace
|
||
expectEqual(1, Character("1").wholeNumberValue)
|
||
expectEqual(1, Character("𒐴").wholeNumberValue)
|
||
expectEqual(1, Character("ⅰ").wholeNumberValue) // small roman numeral
|
||
expectEqual(1, Character("𝟏").wholeNumberValue) // math bold
|
||
expectEqual(2, Character("②").wholeNumberValue)
|
||
expectEqual(2, Character("٢").wholeNumberValue)
|
||
expectEqual(2, Character("২").wholeNumberValue)
|
||
expectEqual(2, Character("੨").wholeNumberValue)
|
||
expectEqual(2, Character("૨").wholeNumberValue)
|
||
expectEqual(3, Character("³").wholeNumberValue)
|
||
expectEqual(4, Character("٤").wholeNumberValue)
|
||
expectEqual(4, Character("൪").wholeNumberValue)
|
||
expectEqual(4, Character("೪").wholeNumberValue)
|
||
expectEqual(4, Character("౪").wholeNumberValue)
|
||
expectEqual(4, Character("௪").wholeNumberValue)
|
||
expectEqual(4, Character("୪").wholeNumberValue)
|
||
expectEqual(4, Character("૪").wholeNumberValue)
|
||
expectEqual(4, Character("੪").wholeNumberValue)
|
||
expectEqual(4, Character("๔").wholeNumberValue)
|
||
expectEqual(4, Character("໔").wholeNumberValue)
|
||
expectEqual(5, Character("५").wholeNumberValue)
|
||
expectEqual(5, Character("༥").wholeNumberValue)
|
||
expectEqual(5, Character("፭").wholeNumberValue)
|
||
expectEqual(5, Character("᠕").wholeNumberValue)
|
||
expectEqual(5, Character("Ⅴ").wholeNumberValue) // Roman numeral
|
||
expectEqual(5, Character("𐌡").wholeNumberValue)
|
||
expectEqual(5, Character("߅").wholeNumberValue)
|
||
expectEqual(5, Character("᭕").wholeNumberValue)
|
||
expectEqual(5, Character("𝍤").wholeNumberValue)
|
||
expectEqual(5, Character("᮵").wholeNumberValue)
|
||
expectEqual(6, Character("六").wholeNumberValue)
|
||
expectEqual(6, Character("六").wholeNumberValue) // Compatibility
|
||
expectEqual(7, Character("𝟩").wholeNumberValue) // Math san-serif
|
||
expectEqual(7, Character("㈦").wholeNumberValue)
|
||
expectEqual(7, Character("㊆").wholeNumberValue)
|
||
expectEqual(7, Character("𑁭").wholeNumberValue)
|
||
expectEqual(8, Character("꧘").wholeNumberValue)
|
||
expectEqual(8, Character("᪈").wholeNumberValue)
|
||
expectEqual(8, Character("᪘").wholeNumberValue)
|
||
expectEqual(8, Character("꩘").wholeNumberValue)
|
||
expectEqual(9, Character("๙").wholeNumberValue)
|
||
|
||
expectEqual(18, Character("⒅").wholeNumberValue)
|
||
expectEqual(20, Character("⑳").wholeNumberValue)
|
||
expectEqual(20, Character("𐄑").wholeNumberValue)
|
||
expectEqual(20, Character("𐏔").wholeNumberValue)
|
||
expectEqual(20, Character("𐤘").wholeNumberValue)
|
||
expectEqual(20, Character("〹").wholeNumberValue)
|
||
expectEqual(50, Character("ↆ").wholeNumberValue)
|
||
expectEqual(70, Character("𑁡").wholeNumberValue)
|
||
expectEqual(90, Character("𐍁").wholeNumberValue)
|
||
expectEqual(1_000, Character("𑁥").wholeNumberValue)
|
||
expectEqual(5_000, Character("ↁ").wholeNumberValue)
|
||
expectEqual(10_000, Character("万").wholeNumberValue)
|
||
|
||
expectFalse(Character("7\u{301}").isWholeNumber)
|
||
}
|
||
|
||
CharacterPropertiesTests.test("Casing") {
|
||
let eAccent = Character("\u{0065}\u{0301}")
|
||
let EAccent = Character("\u{0045}\u{0301}")
|
||
expectTrue(eAccent.isLowercase && eAccent.isCased)
|
||
expectFalse(eAccent.isUppercase)
|
||
expectTrue(EAccent.isUppercase && EAccent.isCased)
|
||
expectFalse(EAccent.isLowercase)
|
||
|
||
expectTrue(Character("И").isUppercase)
|
||
expectTrue(Character("и").isLowercase)
|
||
expectTrue(Character("Π").isUppercase)
|
||
expectTrue(Character("π").isLowercase)
|
||
|
||
expectEqual("SS", Character("ß").uppercased())
|
||
|
||
expectEqual("ß", Character("ẞ").lowercased())
|
||
|
||
expectEqual("и", Character("И").lowercased())
|
||
expectEqual("И", Character("и").uppercased())
|
||
expectEqual("π", Character("Π").lowercased())
|
||
expectEqual("Π", Character("π").uppercased())
|
||
}
|
||
|
||
CharacterPropertiesTests.test("Punctuation") {
|
||
expectTrue(Character("!").isPunctuation)
|
||
expectTrue(Character("؟").isPunctuation)
|
||
expectTrue(Character("…").isPunctuation)
|
||
expectTrue(Character("—").isPunctuation)
|
||
expectTrue(Character("“").isPunctuation)
|
||
|
||
expectTrue(Character("﹏").isPunctuation) // compatibility
|
||
}
|
||
|
||
CharacterPropertiesTests.test("Symbols") {
|
||
// Other symbols
|
||
expectTrue(Character("🌍").isSymbol)
|
||
expectTrue(Character("👽").isSymbol)
|
||
expectTrue(Character("®").isSymbol)
|
||
expectTrue(Character("⌹").isSymbol)
|
||
expectTrue(Character("⡆").isSymbol)
|
||
|
||
// Currency
|
||
expectTrue(Character("$").isCurrencySymbol)
|
||
expectTrue(Character("¥").isCurrencySymbol)
|
||
expectTrue(Character("€").isCurrencySymbol)
|
||
|
||
// Math symbols
|
||
expectTrue(Character("∩").isSymbol)
|
||
expectTrue(Character("∩").isMathSymbol)
|
||
expectTrue(Character("+").isSymbol)
|
||
expectTrue(Character("+").isMathSymbol)
|
||
expectTrue(Character("⟺").isSymbol)
|
||
expectTrue(Character("⟺").isMathSymbol)
|
||
expectTrue(Character("∫").isSymbol)
|
||
expectTrue(Character("∫").isMathSymbol)
|
||
|
||
// Math symbols that are letters
|
||
expectFalse(Character("ϰ").isSymbol)
|
||
expectTrue(Character("ϰ").isMathSymbol)
|
||
}
|
||
|
||
CharacterPropertiesTests.test("Whitespace") {
|
||
expectTrue(Character("\t").isWhitespace)
|
||
expectTrue(Character(" ").isWhitespace)
|
||
expectTrue(Character("\u{2029}").isWhitespace)
|
||
expectTrue(Character("\u{3000}").isWhitespace)
|
||
}
|
||
|
||
CharacterPropertiesTests.test("Newline") {
|
||
expectTrue(Character("\n").isNewline)
|
||
expectTrue(Character("\r").isNewline)
|
||
expectTrue(Character("\r\n").isNewline)
|
||
expectTrue(Character("\u{0085}").isNewline)
|
||
expectTrue(Character("\u{2028}").isNewline)
|
||
expectTrue(Character("\u{2029}").isNewline)
|
||
}
|
||
|
||
runAllTests()
|
||
|