// 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( sumFloatsAndDoublesDart, 0.0)) .run(); } double sumFloatsAndDoublesDart(double a, double b, double c) { print("sumFloatsAndDoublesDart($a, $b, $c)"); return a + b + c; }