@@ -257,6 +257,134 @@ enum ComplexResult {
257257 }
258258}
259259
260+ // MARK: - Array Performance Tests
261+
262+ @JS struct Point {
263+ var x : Double
264+ var y : Double
265+ }
266+
267+ @JS class ArrayRoundtrip {
268+ @JS init ( ) { }
269+
270+ // MARK: Primitive Arrays - Int
271+
272+ @JS func takeIntArray( _ values: [ Int ] ) { }
273+ @JS func makeIntArray( ) -> [ Int ] {
274+ return [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ]
275+ }
276+ @JS func roundtripIntArray( _ values: [ Int ] ) -> [ Int ] {
277+ return values
278+ }
279+
280+ @JS func makeIntArrayLarge( ) -> [ Int ] {
281+ return Array ( 1 ... 100 )
282+ }
283+
284+ // MARK: Primitive Arrays - Double
285+
286+ @JS func takeDoubleArray( _ values: [ Double ] ) { }
287+ @JS func makeDoubleArray( ) -> [ Double ] {
288+ return [ 1.1 , 2.2 , 3.3 , 4.4 , 5.5 , 6.6 , 7.7 , 8.8 , 9.9 , 10.0 ]
289+ }
290+ @JS func roundtripDoubleArray( _ values: [ Double ] ) -> [ Double ] {
291+ return values
292+ }
293+
294+ // MARK: Primitive Arrays - String
295+
296+ @JS func takeStringArray( _ values: [ String ] ) { }
297+ @JS func makeStringArray( ) -> [ String ] {
298+ return [ " one " , " two " , " three " , " four " , " five " ]
299+ }
300+ @JS func roundtripStringArray( _ values: [ String ] ) -> [ String ] {
301+ return values
302+ }
303+
304+ // MARK: Struct Arrays
305+
306+ @JS func takePointArray( _ points: [ Point ] ) { }
307+ @JS func makePointArray( ) -> [ Point ] {
308+ return [
309+ Point ( x: 0.0 , y: 0.0 ) ,
310+ Point ( x: 1.0 , y: 1.0 ) ,
311+ Point ( x: 2.0 , y: 2.0 ) ,
312+ Point ( x: 3.0 , y: 3.0 ) ,
313+ Point ( x: 4.0 , y: 4.0 ) ,
314+ ]
315+ }
316+ @JS func roundtripPointArray( _ points: [ Point ] ) -> [ Point ] {
317+ return points
318+ }
319+
320+ @JS func makePointArrayLarge( ) -> [ Point ] {
321+ return ( 0 ..< 50 ) . map { Point ( x: Double ( $0) , y: Double ( $0) ) }
322+ }
323+
324+ // MARK: Nested Arrays
325+
326+ @JS func takeNestedIntArray( _ values: [ [ Int ] ] ) { }
327+ @JS func makeNestedIntArray( ) -> [ [ Int ] ] {
328+ return [
329+ [ 1 , 2 , 3 ] ,
330+ [ 4 , 5 , 6 ] ,
331+ [ 7 , 8 , 9 ] ,
332+ ]
333+ }
334+ @JS func roundtripNestedIntArray( _ values: [ [ Int ] ] ) -> [ [ Int ] ] {
335+ return values
336+ }
337+
338+ @JS func takeNestedPointArray( _ points: [ [ Point ] ] ) { }
339+ @JS func makeNestedPointArray( ) -> [ [ Point ] ] {
340+ return [
341+ [ Point ( x: 0.0 , y: 0.0 ) , Point ( x: 1.0 , y: 1.0 ) ] ,
342+ [ Point ( x: 2.0 , y: 2.0 ) , Point ( x: 3.0 , y: 3.0 ) ] ,
343+ [ Point ( x: 4.0 , y: 4.0 ) , Point ( x: 5.0 , y: 5.0 ) ] ,
344+ ]
345+ }
346+ @JS func roundtripNestedPointArray( _ points: [ [ Point ] ] ) -> [ [ Point ] ] {
347+ return points
348+ }
349+
350+ // MARK: Optional Element Arrays
351+
352+ @JS func takeOptionalIntArray( _ values: [ Int ? ] ) { }
353+ @JS func makeOptionalIntArray( ) -> [ Int ? ] {
354+ return [ 1 , nil , 3 , nil , 5 , nil , 7 , nil , 9 , nil ]
355+ }
356+ @JS func roundtripOptionalIntArray( _ values: [ Int ? ] ) -> [ Int ? ] {
357+ return values
358+ }
359+
360+ @JS func takeOptionalPointArray( _ points: [ Point ? ] ) { }
361+ @JS func makeOptionalPointArray( ) -> [ Point ? ] {
362+ return [
363+ Point ( x: 0.0 , y: 0.0 ) ,
364+ nil ,
365+ Point ( x: 2.0 , y: 2.0 ) ,
366+ nil ,
367+ Point ( x: 4.0 , y: 4.0 ) ,
368+ ]
369+ }
370+ @JS func roundtripOptionalPointArray( _ points: [ Point ? ] ) -> [ Point ? ] {
371+ return points
372+ }
373+
374+ // MARK: Optional Arrays
375+
376+ @JS func takeOptionalArray( _ values: [ Int ] ? ) { }
377+ @JS func makeOptionalArraySome( ) -> [ Int ] ? {
378+ return [ 1 , 2 , 3 , 4 , 5 ]
379+ }
380+ @JS func makeOptionalArrayNone( ) -> [ Int ] ? {
381+ return nil
382+ }
383+ @JS func roundtripOptionalArray( _ values: [ Int ] ? ) -> [ Int ] ? {
384+ return values
385+ }
386+ }
387+
260388@JS func run( ) {
261389
262390 let call = Benchmark ( " Call " )
0 commit comments