| // Copyright (c) 2024, 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/address_of_test_generator.dart. |
| // |
| // SharedObjects=ffi_test_functions |
| // VMOptions= |
| // VMOptions=--deterministic --optimization-counter-threshold=90 |
| // VMOptions=--use-slow-path |
| // VMOptions=--use-slow-path --stacktrace-every=100 |
| |
| // ignore_for_file: unused_import |
| |
| import 'dart:ffi'; |
| import 'dart:typed_data'; |
| |
| import 'package:expect/expect.dart'; |
| |
| import 'address_of_generated_shared.dart'; |
| import 'address_of_shared.dart'; |
| import 'dylib_utils.dart'; |
| |
| final ffiTestFunctions = dlopenPlatformSpecific('ffi_test_functions'); |
| |
| void main() { |
| // Force dlopen so @Native lookups in DynamicLibrary.process() succeed. |
| dlopenGlobalPlatformSpecific('ffi_test_functions'); |
| |
| for (int i = 0; i < 100; ++i) { |
| testAddressOfInt8Array(); |
| } |
| } |
| |
| final class Int8ArrayStruct extends Struct { |
| @Array(20) |
| external Array<Int8> array; |
| } |
| |
| Array<Int8> makeInt8Array(int length) { |
| assert(length == 20); |
| final typedData = makeInt8List(length); |
| final struct = Struct.create<Int8ArrayStruct>(typedData); |
| return struct.array; |
| } |
| |
| void testAddressOfInt8Array() { |
| const length = 20; |
| final array = makeInt8Array(length); |
| final expectedResult = makeExpectedResultInt8(0, length); |
| final result = Foo.takeInt8Pointer(array.address, length); |
| Expect.equals(expectedResult, result); |
| } |
| |
| class Foo { |
| @Native<Int8 Function(Pointer<Int8>, Size)>( |
| symbol: 'TakeInt8Pointer', |
| isLeaf: true, |
| ) |
| external static int takeInt8Pointer(Pointer<Int8> pointer, int length); |
| } |