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