Files
swift-mirror/test/stdlib/CharacterProperties.swift

211 lines
7.9 KiB
Swift
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 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
"", "", "", "", "", "", "", "", "", "", // 22-31
"", "", "", "", "", "", // 32-37
"", "", "", "", "", "", // 38-43
]
// Ensure below loop logic is correct with a couple hard-coded checks
expectEqual(1, Character("1").hexDigitValue!)
expectEqual(2, Character("").hexDigitValue!)
expectEqual(11, Character("").hexDigitValue!)
expectEqual(12, Character("c").hexDigitValue!)
expectEqual(14, Character("").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()