|
| 1 | +// RUN: %target-run-simple-swift %S/../../utils/gen-unicode-data/Data/DerivedCoreProperties.txt %S/../../utils/gen-unicode-data/Data/DerivedNormalizationProps.txt %S/../../utils/gen-unicode-data/Data/DerivedBinaryProperties.txt %S/../../utils/gen-unicode-data/Data/PropList.txt %S/../../utils/gen-unicode-data/Data/emoji-data.txt |
| 2 | +// REQUIRES: executable_test |
| 3 | +// REQUIRES: long_test |
| 4 | +// REQUIRES: optimized_stdlib |
| 5 | + |
| 6 | +import StdlibUnittest |
| 7 | +import StdlibUnicodeUnittest |
| 8 | + |
| 9 | +var UnicodeScalarPropertiesTest = TestSuite("UnicodeScalarProperties") |
| 10 | + |
| 11 | +//===----------------------------------------------------------------------===// |
| 12 | +// Binary Properties |
| 13 | +//===----------------------------------------------------------------------===// |
| 14 | + |
| 15 | +if #available(SwiftStdlib 5.6, *) { |
| 16 | + UnicodeScalarPropertiesTest.test("Binary Properties") { |
| 17 | + // First, check that we correctly parsed the unicode data tables to be able |
| 18 | + // to test against. |
| 19 | + |
| 20 | + // We have 48 properties, but some properties have 'Other_' properties which |
| 21 | + // are included in them, so count those as well. |
| 22 | + expectEqual(56, binaryProperties.keys.count) |
| 23 | + |
| 24 | + for i in 0x0 ... 0x10FFFF { |
| 25 | + guard let scalar = Unicode.Scalar(i) else { |
| 26 | + continue |
| 27 | + } |
| 28 | + |
| 29 | + func check(_ property: String) -> Bool { |
| 30 | + binaryProperties[property]!.contains(scalar) |
| 31 | + } |
| 32 | + |
| 33 | + let props = scalar.properties |
| 34 | + |
| 35 | + expectEqual(props.isAlphabetic, check("Alphabetic") || check("Other_Alphabetic")) |
| 36 | + expectEqual(props.isASCIIHexDigit, check("ASCII_Hex_Digit")) |
| 37 | + expectEqual(props.isBidiControl, check("Bidi_Control")) |
| 38 | + expectEqual(props.isBidiMirrored, check("Bidi_Mirrored")) |
| 39 | + expectEqual(props.isCased, check("Cased")) |
| 40 | + expectEqual(props.isCaseIgnorable, check("Case_Ignorable")) |
| 41 | + expectEqual(props.changesWhenCaseFolded, check("Changes_When_Casefolded")) |
| 42 | + expectEqual(props.changesWhenCaseMapped, check("Changes_When_Casemapped")) |
| 43 | + expectEqual(props.changesWhenLowercased, check("Changes_When_Lowercased")) |
| 44 | + expectEqual(props.changesWhenNFKCCaseFolded, check("Changes_When_NFKC_Casefolded")) |
| 45 | + expectEqual(props.changesWhenTitlecased, check("Changes_When_Titlecased")) |
| 46 | + expectEqual(props.changesWhenUppercased, check("Changes_When_Uppercased")) |
| 47 | + expectEqual(props.isDash, check("Dash")) |
| 48 | + expectEqual(props.isDefaultIgnorableCodePoint, check("Default_Ignorable_Code_Point") || check("Other_Default_Ignorable_Code_Point")) |
| 49 | + expectEqual(props.isDeprecated, check("Deprecated")) |
| 50 | + expectEqual(props.isDiacritic, check("Diacritic")) |
| 51 | + expectEqual(props.isEmoji, check("Emoji")) |
| 52 | + expectEqual(props.isEmojiModifier, check("Emoji_Modifier")) |
| 53 | + expectEqual(props.isEmojiModifierBase, check("Emoji_Modifier_Base")) |
| 54 | + expectEqual(props.isEmojiPresentation, check("Emoji_Presentation")) |
| 55 | + expectEqual(props.isExtender, check("Extender")) |
| 56 | + expectEqual(props.isFullCompositionExclusion, check("Full_Composition_Exclusion")) |
| 57 | + expectEqual(props.isGraphemeBase, check("Grapheme_Base")) |
| 58 | + expectEqual(props.isGraphemeExtend, check("Grapheme_Extend") || check("Other_Grapheme_Extend")) |
| 59 | + expectEqual(props.isHexDigit, check("Hex_Digit")) |
| 60 | + expectEqual(props.isIDContinue, check("ID_Continue") || check("Other_ID_Continue")) |
| 61 | + expectEqual(props.isIDStart, check("ID_Start") || check("Other_ID_Start")) |
| 62 | + expectEqual(props.isIdeographic, check("Ideographic")) |
| 63 | + expectEqual(props.isIDSBinaryOperator, check("IDS_Binary_Operator")) |
| 64 | + expectEqual(props.isIDSTrinaryOperator, check("IDS_Trinary_Operator")) |
| 65 | + expectEqual(props.isJoinControl, check("Join_Control")) |
| 66 | + expectEqual(props.isLogicalOrderException, check("Logical_Order_Exception")) |
| 67 | + expectEqual(props.isLowercase, check("Lowercase") || check("Other_Lowercase")) |
| 68 | + expectEqual(props.isMath, check("Math") || check("Other_Math")) |
| 69 | + expectEqual(props.isNoncharacterCodePoint, check("Noncharacter_Code_Point")) |
| 70 | + expectEqual(props.isPatternSyntax, check("Pattern_Syntax")) |
| 71 | + expectEqual(props.isPatternWhitespace, check("Pattern_White_Space")) |
| 72 | + expectEqual(props.isQuotationMark, check("Quotation_Mark")) |
| 73 | + expectEqual(props.isRadical, check("Radical")) |
| 74 | + expectEqual(props.isSentenceTerminal, check("Sentence_Terminal")) |
| 75 | + expectEqual(props.isSoftDotted, check("Soft_Dotted")) |
| 76 | + expectEqual(props.isTerminalPunctuation, check("Terminal_Punctuation")) |
| 77 | + expectEqual(props.isUnifiedIdeograph, check("Unified_Ideograph")) |
| 78 | + expectEqual(props.isUppercase, check("Uppercase") || check("Other_Uppercase")) |
| 79 | + expectEqual(props.isVariationSelector, check("Variation_Selector")) |
| 80 | + expectEqual(props.isWhitespace, check("White_Space")) |
| 81 | + expectEqual(props.isXIDContinue, check("XID_Continue")) |
| 82 | + expectEqual(props.isXIDStart, check("XID_Start")) |
| 83 | + } |
| 84 | + } |
| 85 | +} |
| 86 | + |
| 87 | +runAllTests() |
0 commit comments