@@ -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