Skip to content

Commit 21af1a1

Browse files
Merge pull request #481 from PassiveLogic/chore/benchmarks-structs
BridgeJS: Struct and struct vs classes benchmarks
2 parents 994ce01 + ba38ba6 commit 21af1a1

File tree

4 files changed

+1700
-1
lines changed

4 files changed

+1700
-1
lines changed

Benchmarks/Sources/Benchmarks.swift

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,136 @@ enum ComplexResult {
111111
}
112112
}
113113

114+
// MARK: - Struct Performance Tests
115+
116+
@JS struct SimpleStruct {
117+
var name: String
118+
var count: Int
119+
var flag: Bool
120+
var rate: Float
121+
var precise: Double
122+
}
123+
124+
@JS struct Address {
125+
var street: String
126+
var city: String
127+
var zipCode: Int
128+
}
129+
130+
@JS struct Person {
131+
var name: String
132+
var age: Int
133+
var address: Address
134+
var email: String?
135+
}
136+
137+
@JS struct ComplexStruct {
138+
var id: Int
139+
var title: String
140+
var active: Bool
141+
var score: Double
142+
var tags: String
143+
var metadata: String
144+
}
145+
146+
@JS class StructRoundtrip {
147+
@JS init() {}
148+
149+
@JS func takeSimple(_ value: SimpleStruct) {}
150+
@JS func makeSimple() -> SimpleStruct {
151+
return SimpleStruct(name: "Hello", count: 42, flag: true, rate: 0.5, precise: 3.14159)
152+
}
153+
@JS func roundtripSimple(_ value: SimpleStruct) -> SimpleStruct {
154+
return value
155+
}
156+
157+
@JS func takeAddress(_ value: Address) {}
158+
@JS func makeAddress() -> Address {
159+
return Address(street: "123 Main St", city: "San Francisco", zipCode: 94102)
160+
}
161+
@JS func roundtripAddress(_ value: Address) -> Address {
162+
return value
163+
}
164+
165+
@JS func takePerson(_ value: Person) {}
166+
@JS func makePerson() -> Person {
167+
return Person(
168+
name: "John Doe",
169+
age: 30,
170+
address: Address(street: "456 Oak Ave", city: "New York", zipCode: 10001),
171+
172+
)
173+
}
174+
@JS func roundtripPerson(_ value: Person) -> Person {
175+
return value
176+
}
177+
178+
@JS func takeComplex(_ value: ComplexStruct) {}
179+
@JS func makeComplex() -> ComplexStruct {
180+
return ComplexStruct(
181+
id: 12345,
182+
title: "Test Item",
183+
active: true,
184+
score: 98.6,
185+
tags: "swift,wasm,benchmark",
186+
metadata: "{\"version\":1}"
187+
)
188+
}
189+
@JS func roundtripComplex(_ value: ComplexStruct) -> ComplexStruct {
190+
return value
191+
}
192+
}
193+
194+
// MARK: - Class vs Struct Comparison Tests
195+
196+
@JS class SimpleClass {
197+
@JS var name: String
198+
@JS var count: Int
199+
@JS var flag: Bool
200+
@JS var rate: Float
201+
@JS var precise: Double
202+
203+
@JS init(name: String, count: Int, flag: Bool, rate: Float, precise: Double) {
204+
self.name = name
205+
self.count = count
206+
self.flag = flag
207+
self.rate = rate
208+
self.precise = precise
209+
}
210+
}
211+
212+
@JS class AddressClass {
213+
@JS var street: String
214+
@JS var city: String
215+
@JS var zipCode: Int
216+
217+
@JS init(street: String, city: String, zipCode: Int) {
218+
self.street = street
219+
self.city = city
220+
self.zipCode = zipCode
221+
}
222+
}
223+
224+
@JS class ClassRoundtrip {
225+
@JS init() {}
226+
227+
@JS func takeSimpleClass(_ value: SimpleClass) {}
228+
@JS func makeSimpleClass() -> SimpleClass {
229+
return SimpleClass(name: "Hello", count: 42, flag: true, rate: 0.5, precise: 3.14159)
230+
}
231+
@JS func roundtripSimpleClass(_ value: SimpleClass) -> SimpleClass {
232+
return value
233+
}
234+
235+
@JS func takeAddressClass(_ value: AddressClass) {}
236+
@JS func makeAddressClass() -> AddressClass {
237+
return AddressClass(street: "123 Main St", city: "San Francisco", zipCode: 94102)
238+
}
239+
@JS func roundtripAddressClass(_ value: AddressClass) -> AddressClass {
240+
return value
241+
}
242+
}
243+
114244
@JS func run() {
115245

116246
let call = Benchmark("Call")

0 commit comments

Comments
 (0)