Skip to content

Commit fea8a86

Browse files
committed
Add an array bridging race test that I forgot to add and commit some
time ago Swift SVN r22751
1 parent 350c41c commit fea8a86

File tree

1 file changed

+115
-0
lines changed

1 file changed

+115
-0
lines changed
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
// RUN: rm -rf %t
2+
// RUN: mkdir -p %t
3+
//
4+
// FIXME: -fobjc-abi-version=2 is a band-aid fix for for rdar://16946936
5+
//
6+
// RUN: xcrun -sdk %target-sdk-name clang++ -fobjc-arc -fobjc-abi-version=2 -arch %target-cpu %S/../../test/1_stdlib/Inputs/SlurpFastEnumeration/SlurpFastEnumeration.m -c -o %t/SlurpFastEnumeration.o
7+
//
8+
// RUN: cp %s %t/main.swift
9+
// RUN: %target-build-swift -Xfrontend -disable-access-control -I %S/../../test/1_stdlib/Inputs/SlurpFastEnumeration/ %t/main.swift %S/../../test/1_stdlib/Inputs/DictionaryKeyValueTypes.swift -Xlinker %t/SlurpFastEnumeration.o -o %t.out -O
10+
// RUN: %target-run %t.out
11+
12+
import StdlibUnittest
13+
import Foundation
14+
import SlurpFastEnumeration
15+
16+
struct ArrayBridge_objectAtIndex_RaceTest : RaceTestWithPerTrialDataType {
17+
class RaceData {
18+
var nsa: NSArray
19+
init(nsa: NSArray) {
20+
self.nsa = nsa
21+
}
22+
}
23+
24+
typealias ThreadLocalData = Void
25+
typealias Observation = Observation1UWord
26+
27+
func makeRaceData() -> RaceData {
28+
let nsa = getBridgedNSArrayOfValueTypeCustomBridged(numElements: 1)
29+
return RaceData(nsa: nsa)
30+
}
31+
32+
func makeThreadLocalData() -> Void {
33+
return Void()
34+
}
35+
36+
func thread1(
37+
raceData: RaceData, inout _ threadLocalData: ThreadLocalData
38+
) -> Observation {
39+
let nsa = raceData.nsa
40+
var v: AnyObject = nsa.objectAtIndex(0)
41+
return Observation(unsafeBitCast(v, UWord.self))
42+
}
43+
44+
func evaluateObservations<
45+
S : SinkType where S.Element == RaceTestObservationEvaluation
46+
>(observations: [Observation], inout _ sink: S) {
47+
sink.put(evaluateObservationsAllEqual(observations))
48+
}
49+
}
50+
51+
struct ArrayBridge_FastEnumeration_ObjC_RaceTest :
52+
RaceTestWithPerTrialDataType {
53+
class RaceData {
54+
var nsa: NSArray
55+
init(nsa: NSArray) {
56+
self.nsa = nsa
57+
}
58+
}
59+
60+
typealias ThreadLocalData = Void
61+
typealias Observation = Observation4UWord
62+
63+
func makeRaceData() -> RaceData {
64+
let nsa = getBridgedNSArrayOfValueTypeCustomBridged(numElements: 4)
65+
return RaceData(nsa: nsa)
66+
}
67+
68+
func makeThreadLocalData() -> Void {
69+
return Void()
70+
}
71+
72+
func thread1(
73+
raceData: RaceData, inout _ threadLocalData: ThreadLocalData
74+
) -> Observation {
75+
let nsa = raceData.nsa
76+
let objcValues = NSMutableArray()
77+
slurpFastEnumerationOfArrayFromObjCImpl(nsa, nsa, objcValues)
78+
return Observation(
79+
unsafeBitCast(objcValues[0], UWord.self),
80+
unsafeBitCast(objcValues[1], UWord.self),
81+
unsafeBitCast(objcValues[2], UWord.self),
82+
unsafeBitCast(objcValues[3], UWord.self))
83+
}
84+
85+
func evaluateObservations<
86+
S : SinkType where S.Element == RaceTestObservationEvaluation
87+
>(observations: [Observation], inout _ sink: S) {
88+
sink.put(evaluateObservationsAllEqual(observations))
89+
}
90+
}
91+
92+
var ArrayTestSuite = TestSuite("Array")
93+
94+
ArrayTestSuite.test(
95+
"BridgedToObjC/Custom/objectAtIndex/RaceTest") {
96+
runRaceTest(ArrayBridge_objectAtIndex_RaceTest.self, trials: 100)
97+
}
98+
99+
ArrayTestSuite.test(
100+
"BridgedToObjC/Custom/FastEnumeration/UseFromObjC/RaceTest") {
101+
runRaceTest(
102+
ArrayBridge_FastEnumeration_ObjC_RaceTest.self,
103+
trials: 100)
104+
}
105+
106+
ArrayTestSuite.setUp {
107+
resetLeaksOfDictionaryKeysValues()
108+
}
109+
110+
ArrayTestSuite.tearDown {
111+
expectNoLeaksOfDictionaryKeysValues()
112+
}
113+
114+
runAllTests()
115+

0 commit comments

Comments
 (0)