@@ -1951,9 +1951,9 @@ struct ComparisonTestCase {
1951
1951
}
1952
1952
}
1953
1953
1954
- func testOpaquePath ( ) {
1954
+ func testOpaqueStrings ( ) {
1955
1955
#if _runtime(_ObjC)
1956
- let opaqueStrings = strings. map { NSSlowString ( string: $0) as String }
1956
+ let opaqueStrings = strings. map { NSSlowString ( string: $0) as String }
1957
1957
for pair in zip ( opaqueStrings, opaqueStrings [ 1 ... ] ) {
1958
1958
switch comparison {
1959
1959
case . less:
@@ -1964,20 +1964,37 @@ struct ComparisonTestCase {
1964
1964
expectEqual ( pair. 0 , pair. 1 )
1965
1965
}
1966
1966
}
1967
+ #endif
1968
+ }
1969
+
1970
+ func testOpaqueSubstrings( ) {
1971
+ #if _runtime(_ObjC)
1972
+ for pair in zip ( strings, strings [ 1 ... ] ) {
1973
+ let string1 = pair. 0 . dropLast ( )
1974
+ let string2 = pair. 1
1975
+ let opaqueString = ( NSSlowString ( string: pair. 0 ) as String ) . dropLast ( )
1976
+
1977
+ guard string1. count > 0 else { return }
1978
+
1979
+ let expectedResult : _Ordering = string1 < string2 ? . less : ( string1 > string2 ? . greater : . equal)
1980
+ let opaqueResult : _Ordering = opaqueString < string2 ? . less : ( opaqueString > string2 ? . greater : . equal)
1981
+
1982
+ expectEqual ( opaqueResult, expectedResult)
1983
+ }
1967
1984
#endif
1968
1985
}
1969
1986
}
1970
1987
1971
- let comparisonTestCases = [
1988
+ let simpleComparisonTestCases = [
1972
1989
ComparisonTestCase ( [ " a " , " a " ] , . equal) ,
1973
-
1974
- ComparisonTestCase ( [ " " , " Z " , " a " , " b " , " c " , " \u{00c5} " , " á " ] , . less) ,
1975
-
1976
1990
ComparisonTestCase ( [ " abcdefg " , " abcdefg " ] , . equal) ,
1991
+ ComparisonTestCase ( [ " " , " Z " , " a " , " b " , " c " , " \u{00c5} " , " á " ] , . less) ,
1977
1992
1978
1993
ComparisonTestCase ( [ " ábcdefg " , " ábcdefgh " , " ábcdefghi " ] , . less) ,
1979
1994
ComparisonTestCase ( [ " abcdefg " , " abcdefgh " , " abcdefghi " ] , . less) ,
1995
+ ]
1980
1996
1997
+ let complexComparisonTestCases = [
1981
1998
ComparisonTestCase ( [ " á " , " \u{0061} \u{0301} " ] , . equal) ,
1982
1999
ComparisonTestCase ( [ " à " , " \u{0061} \u{0301} " , " â " , " \u{e3} " , " a \u{0308} " ] , . less) ,
1983
2000
@@ -2049,14 +2066,25 @@ let comparisonTestCases = [
2049
2066
ComparisonTestCase ( [ " ì̡̢̧̨̝̞̟̠̣̤̥̦̩̪̫̬̭̮̯̰̹̺̻̼͇͈͉͍͎́̂̃̄̉̊̋̌̍̎̏̐̑̒̓̽̾̿̀́͂̓̈́͆͊͋͌ͅ͏͓͔͕͖͙͐͑͒͗ͬͭͮ͘ " , " ì̡̢̧̨̝̞̟̠̣̤̥̦̩̪̫̬̭̮̯̰̹̺̻̼͇͈͉͍͎́̂̃̄̉̊̋̌̍̎̏̐̑̒̓̽̾̿̀́͂̓̈́͆͊͋͌ͅ͏͓͔͕͖͙͐͑͒͗ͬͭͮ͘ " ] , . equal)
2050
2067
]
2051
2068
2069
+ let comparisonTestCases = simpleComparisonTestCases + complexComparisonTestCases
2070
+
2052
2071
for test in comparisonTestCases {
2053
2072
StringTests . test ( " Comparison. \( test. strings) " ) {
2054
2073
test. test ( )
2055
2074
}
2075
+
2056
2076
StringTests . test ( " Comparison.OpaqueString. \( test. strings) " )
2057
2077
. skip ( . linuxAny( reason: " NSSlowString requires ObjC interop " ) )
2058
2078
. code {
2059
- test. testOpaquePath ( )
2079
+ test. testOpaqueStrings ( )
2080
+ }
2081
+ }
2082
+
2083
+ for test in simpleComparisonTestCases {
2084
+ StringTests . test ( " Comparison.OpaqueSubstring. \( test. strings) " )
2085
+ . skip ( . linuxAny( reason: " NSSlowString requires ObjC interop " ) )
2086
+ . code {
2087
+ test. testOpaqueSubstrings ( )
2060
2088
}
2061
2089
}
2062
2090
0 commit comments