|  | // 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 | 
|  | // 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; | 
|  | } |