| // Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| // |
| // This file has been automatically generated. Please do not edit it manually. |
| // Generated by tests/ffi/generator/structs_by_value_tests_generator.dart. |
| // |
| // SharedObjects=ffi_test_functions |
| // VMOptions= |
| // VMOptions=--deterministic --optimization-counter-threshold=90 |
| // VMOptions=--use-slow-path |
| // VMOptions=--use-slow-path --stacktrace-every=100 |
| |
| import 'dart:ffi'; |
| |
| import 'package:expect/expect.dart'; |
| // ignore: unused_import |
| import 'package:ffi/ffi.dart'; |
| |
| import 'dylib_utils.dart'; |
| |
| // Reuse the compound classes. |
| import 'function_structs_by_value_generated_compounds.dart'; |
| |
| final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions"); |
| void main() { |
| for (int i = 0; i < 100; ++i) { |
| testVariadicAt1Int64x2(); |
| testVariadicAt1Doublex2(); |
| testVariadicAt1Int64x5(); |
| testVariadicAt1Doublex5(); |
| testVariadicAt1Int64x20(); |
| testVariadicAt1Doublex20(); |
| testVariadicAt1Int64x2Struct8BytesIntInt64(); |
| testVariadicAt1Doublex2Struct32BytesHomogeneousDoubleD(); |
| testVariadicAt1DoubleStruct12BytesHomogeneousFloatDoub(); |
| testVariadicAt1Int32Struct20BytesHomogeneousInt32Int32(); |
| testVariadicAt1DoubleStruct20BytesHomogeneousFloatDoub(); |
| testVariadicAt2Int32Int64IntPtr(); |
| testVariadicAt1DoubleInt64Int32DoubleInt64Int32(); |
| testVariadicAt1Int64Int32Struct12BytesHomogeneousFloat(); |
| testVariadicAt11Doublex8FloatStruct12BytesHomogeneousF(); |
| testVariadicAt1DoubleInt64Int32Struct20BytesHomogeneou(); |
| testVariadicAt5Doublex5(); |
| testVariadicAt1Int64x7Struct12BytesHomogeneousInt32(); |
| testVariadicAt1Struct12BytesHomogeneousInt32Int32x4(); |
| } |
| } |
| |
| final variadicAt1Int64x2 = ffiTestFunctions.lookupFunction< |
| Int64 Function(Int64, VarArgs<(Int64,)>), |
| int Function(int, int)>("VariadicAt1Int64x2"); |
| |
| /// Single variadic argument. |
| void testVariadicAt1Int64x2() { |
| int a0; |
| int a1; |
| |
| a0 = -1; |
| a1 = 2; |
| |
| final result = variadicAt1Int64x2(a0, a1); |
| |
| print("result = $result"); |
| |
| Expect.equals(1, result); |
| } |
| |
| final variadicAt1Doublex2 = ffiTestFunctions.lookupFunction< |
| Double Function(Double, VarArgs<(Double,)>), |
| double Function(double, double)>("VariadicAt1Doublex2"); |
| |
| /// Single variadic argument. |
| void testVariadicAt1Doublex2() { |
| double a0; |
| double a1; |
| |
| a0 = -1.0; |
| a1 = 2.0; |
| |
| final result = variadicAt1Doublex2(a0, a1); |
| |
| print("result = $result"); |
| |
| Expect.approxEquals(1.0, result); |
| } |
| |
| final variadicAt1Int64x5 = ffiTestFunctions.lookupFunction< |
| Int64 Function(Int64, VarArgs<(Int64, Int64, Int64, Int64)>), |
| int Function(int, int, int, int, int)>("VariadicAt1Int64x5"); |
| |
| /// Variadic arguments. |
| void testVariadicAt1Int64x5() { |
| int a0; |
| int a1; |
| int a2; |
| int a3; |
| int a4; |
| |
| a0 = -1; |
| a1 = 2; |
| a2 = -3; |
| a3 = 4; |
| a4 = -5; |
| |
| final result = variadicAt1Int64x5(a0, a1, a2, a3, a4); |
| |
| print("result = $result"); |
| |
| Expect.equals(-3, result); |
| } |
| |
| final variadicAt1Doublex5 = ffiTestFunctions.lookupFunction< |
| Double Function(Double, VarArgs<(Double, Double, Double, Double)>), |
| double Function( |
| double, double, double, double, double)>("VariadicAt1Doublex5"); |
| |
| /// Variadic arguments. |
| void testVariadicAt1Doublex5() { |
| double a0; |
| double a1; |
| double a2; |
| double a3; |
| double a4; |
| |
| a0 = -1.0; |
| a1 = 2.0; |
| a2 = -3.0; |
| a3 = 4.0; |
| a4 = -5.0; |
| |
| final result = variadicAt1Doublex5(a0, a1, a2, a3, a4); |
| |
| print("result = $result"); |
| |
| Expect.approxEquals(-3.0, result); |
| } |
| |
| final variadicAt1Int64x20 = ffiTestFunctions.lookupFunction< |
| Int64 Function( |
| Int64, |
| VarArgs< |
| ( |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64 |
| )>), |
| int Function(int, int, int, int, int, int, int, int, int, int, int, int, |
| int, int, int, int, int, int, int, int)>("VariadicAt1Int64x20"); |
| |
| /// Variadic arguments exhaust registers. |
| void testVariadicAt1Int64x20() { |
| int a0; |
| int a1; |
| int a2; |
| int a3; |
| int a4; |
| int a5; |
| int a6; |
| int a7; |
| int a8; |
| int a9; |
| int a10; |
| int a11; |
| int a12; |
| int a13; |
| int a14; |
| int a15; |
| int a16; |
| int a17; |
| int a18; |
| int a19; |
| |
| a0 = -1; |
| a1 = 2; |
| a2 = -3; |
| a3 = 4; |
| a4 = -5; |
| a5 = 6; |
| a6 = -7; |
| a7 = 8; |
| a8 = -9; |
| a9 = 10; |
| a10 = -11; |
| a11 = 12; |
| a12 = -13; |
| a13 = 14; |
| a14 = -15; |
| a15 = 16; |
| a16 = -17; |
| a17 = 18; |
| a18 = -19; |
| a19 = 20; |
| |
| final result = variadicAt1Int64x20(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, |
| a10, a11, a12, a13, a14, a15, a16, a17, a18, a19); |
| |
| print("result = $result"); |
| |
| Expect.equals(10, result); |
| } |
| |
| final variadicAt1Doublex20 = ffiTestFunctions.lookupFunction< |
| Double Function( |
| Double, |
| VarArgs< |
| ( |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double |
| )>), |
| double Function( |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double)>("VariadicAt1Doublex20"); |
| |
| /// Variadic arguments exhaust registers. |
| void testVariadicAt1Doublex20() { |
| double a0; |
| double a1; |
| double a2; |
| double a3; |
| double a4; |
| double a5; |
| double a6; |
| double a7; |
| double a8; |
| double a9; |
| double a10; |
| double a11; |
| double a12; |
| double a13; |
| double a14; |
| double a15; |
| double a16; |
| double a17; |
| double a18; |
| double a19; |
| |
| a0 = -1.0; |
| a1 = 2.0; |
| a2 = -3.0; |
| a3 = 4.0; |
| a4 = -5.0; |
| a5 = 6.0; |
| a6 = -7.0; |
| a7 = 8.0; |
| a8 = -9.0; |
| a9 = 10.0; |
| a10 = -11.0; |
| a11 = 12.0; |
| a12 = -13.0; |
| a13 = 14.0; |
| a14 = -15.0; |
| a15 = 16.0; |
| a16 = -17.0; |
| a17 = 18.0; |
| a18 = -19.0; |
| a19 = 20.0; |
| |
| final result = variadicAt1Doublex20(a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, |
| a10, a11, a12, a13, a14, a15, a16, a17, a18, a19); |
| |
| print("result = $result"); |
| |
| Expect.approxEquals(10.0, result); |
| } |
| |
| final variadicAt1Int64x2Struct8BytesIntInt64 = ffiTestFunctions.lookupFunction< |
| Int64 Function(Int64, VarArgs<(Int64, Struct8BytesInt, Int64)>), |
| int Function(int, int, Struct8BytesInt, |
| int)>("VariadicAt1Int64x2Struct8BytesIntInt64"); |
| |
| /// Variadic arguments including struct. |
| void testVariadicAt1Int64x2Struct8BytesIntInt64() { |
| int a0; |
| int a1; |
| final a2Pointer = calloc<Struct8BytesInt>(); |
| final Struct8BytesInt a2 = a2Pointer.ref; |
| int a3; |
| |
| a0 = -1; |
| a1 = 2; |
| a2.a0 = -3; |
| a2.a1 = 4; |
| a2.a2 = -5; |
| a3 = 6; |
| |
| final result = variadicAt1Int64x2Struct8BytesIntInt64(a0, a1, a2, a3); |
| |
| print("result = $result"); |
| |
| Expect.equals(3, result); |
| |
| calloc.free(a2Pointer); |
| } |
| |
| final variadicAt1Doublex2Struct32BytesHomogeneousDoubleD = |
| ffiTestFunctions.lookupFunction< |
| Double Function( |
| Double, VarArgs<(Double, Struct32BytesHomogeneousDouble, Double)>), |
| double Function(double, double, Struct32BytesHomogeneousDouble, |
| double)>("VariadicAt1Doublex2Struct32BytesHomogeneousDoubleD"); |
| |
| /// Variadic arguments including struct. |
| void testVariadicAt1Doublex2Struct32BytesHomogeneousDoubleD() { |
| double a0; |
| double a1; |
| final a2Pointer = calloc<Struct32BytesHomogeneousDouble>(); |
| final Struct32BytesHomogeneousDouble a2 = a2Pointer.ref; |
| double a3; |
| |
| a0 = -1.0; |
| a1 = 2.0; |
| a2.a0 = -3.0; |
| a2.a1 = 4.0; |
| a2.a2 = -5.0; |
| a2.a3 = 6.0; |
| a3 = -7.0; |
| |
| final result = |
| variadicAt1Doublex2Struct32BytesHomogeneousDoubleD(a0, a1, a2, a3); |
| |
| print("result = $result"); |
| |
| Expect.approxEquals(-4.0, result); |
| |
| calloc.free(a2Pointer); |
| } |
| |
| final variadicAt1DoubleStruct12BytesHomogeneousFloatDoub = |
| ffiTestFunctions.lookupFunction< |
| Double Function( |
| Double, VarArgs<(Struct12BytesHomogeneousFloat, Double)>), |
| double Function(double, Struct12BytesHomogeneousFloat, |
| double)>("VariadicAt1DoubleStruct12BytesHomogeneousFloatDoub"); |
| |
| /// Variadic arguments including struct. |
| void testVariadicAt1DoubleStruct12BytesHomogeneousFloatDoub() { |
| double a0; |
| final a1Pointer = calloc<Struct12BytesHomogeneousFloat>(); |
| final Struct12BytesHomogeneousFloat a1 = a1Pointer.ref; |
| double a2; |
| |
| a0 = -1.0; |
| a1.a0 = 2.0; |
| a1.a1 = -3.0; |
| a1.a2 = 4.0; |
| a2 = -5.0; |
| |
| final result = variadicAt1DoubleStruct12BytesHomogeneousFloatDoub(a0, a1, a2); |
| |
| print("result = $result"); |
| |
| Expect.approxEquals(-3.0, result); |
| |
| calloc.free(a1Pointer); |
| } |
| |
| final variadicAt1Int32Struct20BytesHomogeneousInt32Int32 = |
| ffiTestFunctions.lookupFunction< |
| Int32 Function(Int32, VarArgs<(Struct20BytesHomogeneousInt32, Int32)>), |
| int Function(int, Struct20BytesHomogeneousInt32, |
| int)>("VariadicAt1Int32Struct20BytesHomogeneousInt32Int32"); |
| |
| /// Variadic arguments including struct. |
| void testVariadicAt1Int32Struct20BytesHomogeneousInt32Int32() { |
| int a0; |
| final a1Pointer = calloc<Struct20BytesHomogeneousInt32>(); |
| final Struct20BytesHomogeneousInt32 a1 = a1Pointer.ref; |
| int a2; |
| |
| a0 = -1; |
| a1.a0 = 2; |
| a1.a1 = -3; |
| a1.a2 = 4; |
| a1.a3 = -5; |
| a1.a4 = 6; |
| a2 = -7; |
| |
| final result = variadicAt1Int32Struct20BytesHomogeneousInt32Int32(a0, a1, a2); |
| |
| print("result = $result"); |
| |
| Expect.equals(-4, result); |
| |
| calloc.free(a1Pointer); |
| } |
| |
| final variadicAt1DoubleStruct20BytesHomogeneousFloatDoub = |
| ffiTestFunctions.lookupFunction< |
| Double Function( |
| Double, VarArgs<(Struct20BytesHomogeneousFloat, Double)>), |
| double Function(double, Struct20BytesHomogeneousFloat, |
| double)>("VariadicAt1DoubleStruct20BytesHomogeneousFloatDoub"); |
| |
| /// Variadic arguments including struct. |
| void testVariadicAt1DoubleStruct20BytesHomogeneousFloatDoub() { |
| double a0; |
| final a1Pointer = calloc<Struct20BytesHomogeneousFloat>(); |
| final Struct20BytesHomogeneousFloat a1 = a1Pointer.ref; |
| double a2; |
| |
| a0 = -1.0; |
| a1.a0 = 2.0; |
| a1.a1 = -3.0; |
| a1.a2 = 4.0; |
| a1.a3 = -5.0; |
| a1.a4 = 6.0; |
| a2 = -7.0; |
| |
| final result = variadicAt1DoubleStruct20BytesHomogeneousFloatDoub(a0, a1, a2); |
| |
| print("result = $result"); |
| |
| Expect.approxEquals(-4.0, result); |
| |
| calloc.free(a1Pointer); |
| } |
| |
| final variadicAt2Int32Int64IntPtr = ffiTestFunctions.lookupFunction< |
| Int32 Function(Int32, Int64, VarArgs<(IntPtr,)>), |
| int Function(int, int, int)>("VariadicAt2Int32Int64IntPtr"); |
| |
| /// Regression test for variadic arguments. |
| /// https://github.com/dart-lang/sdk/issues/49460 |
| void testVariadicAt2Int32Int64IntPtr() { |
| int a0; |
| int a1; |
| int a2; |
| |
| a0 = -1; |
| a1 = 2; |
| a2 = -3; |
| |
| final result = variadicAt2Int32Int64IntPtr(a0, a1, a2); |
| |
| print("result = $result"); |
| |
| Expect.equals(-2, result); |
| } |
| |
| final variadicAt1DoubleInt64Int32DoubleInt64Int32 = |
| ffiTestFunctions.lookupFunction< |
| Double Function(Double, VarArgs<(Int64, Int32, Double, Int64, Int32)>), |
| double Function(double, int, int, double, int, |
| int)>("VariadicAt1DoubleInt64Int32DoubleInt64Int32"); |
| |
| /// Variadic arguments mixed. |
| void testVariadicAt1DoubleInt64Int32DoubleInt64Int32() { |
| double a0; |
| int a1; |
| int a2; |
| double a3; |
| int a4; |
| int a5; |
| |
| a0 = -1.0; |
| a1 = 2; |
| a2 = -3; |
| a3 = 4.0; |
| a4 = -5; |
| a5 = 6; |
| |
| final result = |
| variadicAt1DoubleInt64Int32DoubleInt64Int32(a0, a1, a2, a3, a4, a5); |
| |
| print("result = $result"); |
| |
| Expect.approxEquals(3.0, result); |
| } |
| |
| final variadicAt1Int64Int32Struct12BytesHomogeneousFloat = |
| ffiTestFunctions |
| .lookupFunction< |
| Double Function( |
| Int64, VarArgs<(Int32, Struct12BytesHomogeneousFloat)>), |
| double Function(int, int, Struct12BytesHomogeneousFloat)>( |
| "VariadicAt1Int64Int32Struct12BytesHomogeneousFloat"); |
| |
| /// Variadic arguments homogenous struct stack alignment on macos_arm64. |
| void testVariadicAt1Int64Int32Struct12BytesHomogeneousFloat() { |
| int a0; |
| int a1; |
| final a2Pointer = calloc<Struct12BytesHomogeneousFloat>(); |
| final Struct12BytesHomogeneousFloat a2 = a2Pointer.ref; |
| |
| a0 = -1; |
| a1 = 2; |
| a2.a0 = -3.0; |
| a2.a1 = 4.0; |
| a2.a2 = -5.0; |
| |
| final result = variadicAt1Int64Int32Struct12BytesHomogeneousFloat(a0, a1, a2); |
| |
| print("result = $result"); |
| |
| Expect.approxEquals(-3.0, result); |
| |
| calloc.free(a2Pointer); |
| } |
| |
| final variadicAt11Doublex8FloatStruct12BytesHomogeneousF = |
| ffiTestFunctions.lookupFunction< |
| Double Function( |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Double, |
| Float, |
| Struct12BytesHomogeneousFloat, |
| Int64, |
| VarArgs<(Int32, Struct12BytesHomogeneousFloat)>), |
| double Function( |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| double, |
| Struct12BytesHomogeneousFloat, |
| int, |
| int, |
| Struct12BytesHomogeneousFloat)>( |
| "VariadicAt11Doublex8FloatStruct12BytesHomogeneousF"); |
| |
| /// Variadic arguments homogenous struct stack alignment on macos_arm64. |
| void testVariadicAt11Doublex8FloatStruct12BytesHomogeneousF() { |
| double a0; |
| double a1; |
| double a2; |
| double a3; |
| double a4; |
| double a5; |
| double a6; |
| double a7; |
| double a8; |
| final a9Pointer = calloc<Struct12BytesHomogeneousFloat>(); |
| final Struct12BytesHomogeneousFloat a9 = a9Pointer.ref; |
| int a10; |
| int a11; |
| final a12Pointer = calloc<Struct12BytesHomogeneousFloat>(); |
| final Struct12BytesHomogeneousFloat a12 = a12Pointer.ref; |
| |
| a0 = -1.0; |
| a1 = 2.0; |
| a2 = -3.0; |
| a3 = 4.0; |
| a4 = -5.0; |
| a5 = 6.0; |
| a6 = -7.0; |
| a7 = 8.0; |
| a8 = -9.0; |
| a9.a0 = 10.0; |
| a9.a1 = -11.0; |
| a9.a2 = 12.0; |
| a10 = -13; |
| a11 = 14; |
| a12.a0 = -15.0; |
| a12.a1 = 16.0; |
| a12.a2 = -17.0; |
| |
| final result = variadicAt11Doublex8FloatStruct12BytesHomogeneousF( |
| a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12); |
| |
| print("result = $result"); |
| |
| Expect.approxEquals(-9.0, result); |
| |
| calloc.free(a9Pointer); |
| calloc.free(a12Pointer); |
| } |
| |
| final variadicAt1DoubleInt64Int32Struct20BytesHomogeneou = |
| ffiTestFunctions.lookupFunction< |
| Double Function( |
| Double, |
| VarArgs< |
| ( |
| Int64, |
| Int32, |
| Struct20BytesHomogeneousInt32, |
| Double, |
| Int64, |
| Int32, |
| Struct12BytesHomogeneousFloat, |
| Int64 |
| )>), |
| double Function( |
| double, |
| int, |
| int, |
| Struct20BytesHomogeneousInt32, |
| double, |
| int, |
| int, |
| Struct12BytesHomogeneousFloat, |
| int)>("VariadicAt1DoubleInt64Int32Struct20BytesHomogeneou"); |
| |
| /// Variadic arguments mixed. |
| void testVariadicAt1DoubleInt64Int32Struct20BytesHomogeneou() { |
| double a0; |
| int a1; |
| int a2; |
| final a3Pointer = calloc<Struct20BytesHomogeneousInt32>(); |
| final Struct20BytesHomogeneousInt32 a3 = a3Pointer.ref; |
| double a4; |
| int a5; |
| int a6; |
| final a7Pointer = calloc<Struct12BytesHomogeneousFloat>(); |
| final Struct12BytesHomogeneousFloat a7 = a7Pointer.ref; |
| int a8; |
| |
| a0 = -1.0; |
| a1 = 2; |
| a2 = -3; |
| a3.a0 = 4; |
| a3.a1 = -5; |
| a3.a2 = 6; |
| a3.a3 = -7; |
| a3.a4 = 8; |
| a4 = -9.0; |
| a5 = 10; |
| a6 = -11; |
| a7.a0 = 12.0; |
| a7.a1 = -13.0; |
| a7.a2 = 14.0; |
| a8 = -15; |
| |
| final result = variadicAt1DoubleInt64Int32Struct20BytesHomogeneou( |
| a0, a1, a2, a3, a4, a5, a6, a7, a8); |
| |
| print("result = $result"); |
| |
| Expect.approxEquals(-8.0, result); |
| |
| calloc.free(a3Pointer); |
| calloc.free(a7Pointer); |
| } |
| |
| final variadicAt5Doublex5 = ffiTestFunctions.lookupFunction< |
| Double Function(Double, Double, Double, Double, Double, VarArgs<()>), |
| double Function( |
| double, double, double, double, double)>("VariadicAt5Doublex5"); |
| |
| /// Variadic arguments function definition, but not passing any. |
| void testVariadicAt5Doublex5() { |
| double a0; |
| double a1; |
| double a2; |
| double a3; |
| double a4; |
| |
| a0 = -1.0; |
| a1 = 2.0; |
| a2 = -3.0; |
| a3 = 4.0; |
| a4 = -5.0; |
| |
| final result = variadicAt5Doublex5(a0, a1, a2, a3, a4); |
| |
| print("result = $result"); |
| |
| Expect.approxEquals(-3.0, result); |
| } |
| |
| final variadicAt1Int64x7Struct12BytesHomogeneousInt32 = |
| ffiTestFunctions.lookupFunction< |
| Int64 Function( |
| Int64, |
| VarArgs< |
| ( |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Int64, |
| Struct12BytesHomogeneousInt32 |
| )>), |
| int Function(int, int, int, int, int, int, int, |
| Struct12BytesHomogeneousInt32)>( |
| "VariadicAt1Int64x7Struct12BytesHomogeneousInt32"); |
| |
| /// Struct stradles last argument register, variadic |
| void testVariadicAt1Int64x7Struct12BytesHomogeneousInt32() { |
| int a0; |
| int a1; |
| int a2; |
| int a3; |
| int a4; |
| int a5; |
| int a6; |
| final a7Pointer = calloc<Struct12BytesHomogeneousInt32>(); |
| final Struct12BytesHomogeneousInt32 a7 = a7Pointer.ref; |
| |
| a0 = -1; |
| a1 = 2; |
| a2 = -3; |
| a3 = 4; |
| a4 = -5; |
| a5 = 6; |
| a6 = -7; |
| a7.a0 = 8; |
| a7.a1 = -9; |
| a7.a2 = 10; |
| |
| final result = variadicAt1Int64x7Struct12BytesHomogeneousInt32( |
| a0, a1, a2, a3, a4, a5, a6, a7); |
| |
| print("result = $result"); |
| |
| Expect.equals(5, result); |
| |
| calloc.free(a7Pointer); |
| } |
| |
| final variadicAt1Struct12BytesHomogeneousInt32Int32x4 = |
| ffiTestFunctions.lookupFunction< |
| Int32 Function(Struct12BytesHomogeneousInt32, |
| VarArgs<(Int32, Int32, Int32, Int32)>), |
| int Function(Struct12BytesHomogeneousInt32, int, int, int, |
| int)>("VariadicAt1Struct12BytesHomogeneousInt32Int32x4"); |
| |
| /// Variadic arguments test on macos_arm64. |
| void testVariadicAt1Struct12BytesHomogeneousInt32Int32x4() { |
| final a0Pointer = calloc<Struct12BytesHomogeneousInt32>(); |
| final Struct12BytesHomogeneousInt32 a0 = a0Pointer.ref; |
| int a1; |
| int a2; |
| int a3; |
| int a4; |
| |
| a0.a0 = -1; |
| a0.a1 = 2; |
| a0.a2 = -3; |
| a1 = 4; |
| a2 = -5; |
| a3 = 6; |
| a4 = -7; |
| |
| final result = |
| variadicAt1Struct12BytesHomogeneousInt32Int32x4(a0, a1, a2, a3, a4); |
| |
| print("result = $result"); |
| |
| Expect.equals(-4, result); |
| |
| calloc.free(a0Pointer); |
| } |