| // Copyright (c) 2020, 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. |
| // |
| // Dart test program for testing dart:ffi function pointers. |
| // |
| // VMOptions= |
| // VMOptions=--deterministic --optimization-counter-threshold=10 |
| // VMOptions=--use-slow-path |
| // VMOptions=--use-slow-path --stacktrace-every=100 |
| // VMOptions=--write-protect-code --no-dual-map-code |
| // VMOptions=--write-protect-code --no-dual-map-code --use-slow-path |
| // VMOptions=--write-protect-code --no-dual-map-code --stacktrace-every=100 |
| // SharedObjects=ffi_test_functions |
| |
| import 'dart:ffi'; |
| |
| import "package:expect/expect.dart"; |
| |
| import 'callback_tests_utils.dart'; |
| import 'dylib_utils.dart'; |
| |
| void main() { |
| for (int i = 0; i < 100; ++i) { |
| testSumFloatsAndDoubles(); |
| testSumFloatsAndDoublesCallback(); |
| } |
| } |
| |
| DynamicLibrary ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions"); |
| |
| final sumFloatsAndDoubles = ffiTestFunctions.lookupFunction< |
| Double Function(Float, Double, Float), |
| double Function(double, double, double)>("SumFloatsAndDoubles"); |
| |
| void testSumFloatsAndDoubles() { |
| Expect.approxEquals(6.0, sumFloatsAndDoubles(1.0, 2.0, 3.0)); |
| } |
| |
| void testSumFloatsAndDoublesCallback() { |
| CallbackTest( |
| "SumFloatsAndDoubles", |
| Pointer.fromFunction<Double Function(Float, Double, Float)>( |
| sumFloatsAndDoublesDart, 0.0)) |
| .run(); |
| } |
| |
| double sumFloatsAndDoublesDart(double a, double b, double c) { |
| print("sumFloatsAndDoublesDart($a, $b, $c)"); |
| return a + b + c; |
| } |