Skip to content

Commit 421af22

Browse files
committed
1 parent 1f32e2d commit 421af22

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

test/stdlib/TestData.swift

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,6 +1077,99 @@ class TestData : TestDataSuper {
10771077
expectEqual(slice4[0], 8)
10781078
}
10791079

1080+
func test_rangeOfDataProtocol() {
1081+
// https://bugs.swift.org/browse/SR-10689
1082+
1083+
let base = Data([0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x03,
1084+
0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x03])
1085+
let subdata = base[10..<13] // [0x02, 0x03, 0x00]
1086+
let oneByte = base[14..<15] // [0x02]
1087+
1088+
do { // firstRange(of:in:)
1089+
func assertFirstRange(_ data: Data, _ fragment: Data, range: ClosedRange<Int>? = nil,
1090+
expectedStartIndex: Int?,
1091+
_ message: @autoclosure () -> String = "",
1092+
file: String = #file, line: UInt = #line) {
1093+
if let index = expectedStartIndex {
1094+
let expectedRange: Range<Int> = index..<(index + fragment.count)
1095+
if let someRange = range {
1096+
expectEqual(data.firstRange(of: fragment, in: someRange), expectedRange, message(), file: file, line: line)
1097+
} else {
1098+
expectEqual(data.firstRange(of: fragment), expectedRange, message(), file: file, line: line)
1099+
}
1100+
} else {
1101+
if let someRange = range {
1102+
expectNil(data.firstRange(of: fragment, in: someRange), message(), file: file, line: line)
1103+
} else {
1104+
expectNil(data.firstRange(of: fragment), message(), file: file, line: line)
1105+
}
1106+
}
1107+
}
1108+
1109+
assertFirstRange(base, base, expectedStartIndex: base.startIndex)
1110+
assertFirstRange(base, subdata, expectedStartIndex: 2)
1111+
assertFirstRange(base, oneByte, expectedStartIndex: 2)
1112+
1113+
assertFirstRange(subdata, base, expectedStartIndex: nil)
1114+
assertFirstRange(subdata, subdata, expectedStartIndex: subdata.startIndex)
1115+
assertFirstRange(subdata, oneByte, expectedStartIndex: subdata.startIndex)
1116+
1117+
assertFirstRange(oneByte, base, expectedStartIndex: nil)
1118+
assertFirstRange(oneByte, subdata, expectedStartIndex: nil)
1119+
assertFirstRange(oneByte, oneByte, expectedStartIndex: oneByte.startIndex)
1120+
1121+
assertFirstRange(base, subdata, range: 1...14, expectedStartIndex: 2)
1122+
assertFirstRange(base, subdata, range: 6...8, expectedStartIndex: 6)
1123+
assertFirstRange(base, subdata, range: 8...10, expectedStartIndex: nil)
1124+
1125+
assertFirstRange(base, oneByte, range: 1...14, expectedStartIndex: 2)
1126+
assertFirstRange(base, oneByte, range: 6...6, expectedStartIndex: 6)
1127+
assertFirstRange(base, oneByte, range: 8...9, expectedStartIndex: nil)
1128+
}
1129+
1130+
do { // lastRange(of:in:)
1131+
func assertLastRange(_ data: Data, _ fragment: Data, range: ClosedRange<Int>? = nil,
1132+
expectedStartIndex: Int?,
1133+
_ message: @autoclosure () -> String = "",
1134+
file: String = #file, line: UInt = #line) {
1135+
if let index = expectedStartIndex {
1136+
let expectedRange: Range<Int> = index..<(index + fragment.count)
1137+
if let someRange = range {
1138+
expectEqual(data.lastRange(of: fragment, in: someRange), expectedRange, message(), file: file, line: line)
1139+
} else {
1140+
expectEqual(data.lastRange(of: fragment), expectedRange, message(), file: file, line: line)
1141+
}
1142+
} else {
1143+
if let someRange = range {
1144+
expectNil(data.lastRange(of: fragment, in: someRange), message(), file: file, line: line)
1145+
} else {
1146+
expectNil(data.lastRange(of: fragment), message(), file: file, line: line)
1147+
}
1148+
}
1149+
}
1150+
1151+
assertLastRange(base, base, expectedStartIndex: base.startIndex)
1152+
assertLastRange(base, subdata, expectedStartIndex: 10)
1153+
assertLastRange(base, oneByte, expectedStartIndex: 14)
1154+
1155+
assertLastRange(subdata, base, expectedStartIndex: nil)
1156+
assertLastRange(subdata, subdata, expectedStartIndex: subdata.startIndex)
1157+
assertLastRange(subdata, oneByte, expectedStartIndex: subdata.startIndex)
1158+
1159+
assertLastRange(oneByte, base, expectedStartIndex: nil)
1160+
assertLastRange(oneByte, subdata, expectedStartIndex: nil)
1161+
assertLastRange(oneByte, oneByte, expectedStartIndex: oneByte.startIndex)
1162+
1163+
assertLastRange(base, subdata, range: 1...14, expectedStartIndex: 10)
1164+
assertLastRange(base, subdata, range: 6...8, expectedStartIndex: 6)
1165+
assertLastRange(base, subdata, range: 8...10, expectedStartIndex: nil)
1166+
1167+
assertLastRange(base, oneByte, range: 1...14, expectedStartIndex: 14)
1168+
assertLastRange(base, oneByte, range: 6...6, expectedStartIndex: 6)
1169+
assertLastRange(base, oneByte, range: 8...9, expectedStartIndex: nil)
1170+
}
1171+
}
1172+
10801173
func test_sliceAppending() {
10811174
// https://bugs.swift.org/browse/SR-4473
10821175
var fooData = Data()
@@ -3882,6 +3975,7 @@ DataTests.test("test_noCopyBehavior") { TestData().test_noCopyBehavior() }
38823975
DataTests.test("test_doubleDeallocation") { TestData().test_doubleDeallocation() }
38833976
DataTests.test("test_repeatingValueInitialization") { TestData().test_repeatingValueInitialization() }
38843977
DataTests.test("test_rangeZoo") { TestData().test_rangeZoo() }
3978+
DataTests.test("test_rangeOfDataProtocol") { TestData().test_rangeOfDataProtocol() }
38853979
DataTests.test("test_sliceAppending") { TestData().test_sliceAppending() }
38863980
DataTests.test("test_replaceSubrange") { TestData().test_replaceSubrange() }
38873981
DataTests.test("test_sliceWithUnsafeBytes") { TestData().test_sliceWithUnsafeBytes() }

0 commit comments

Comments
 (0)