blob: 383b482199da7e375e536f336ea2633732ae427d [file] [log] [blame]
// 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 with callbacks.
//
// VMOptions=--deterministic --optimization-counter-threshold=10
// VMOptions=--enable-testing-pragmas
// VMOptions=--enable-testing-pragmas --stacktrace-every=100
// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code
// VMOptions=--enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
// VMOptions=--use-slow-path --enable-testing-pragmas
// VMOptions=--use-slow-path --enable-testing-pragmas --stacktrace-every=100
// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code
// VMOptions=--use-slow-path --enable-testing-pragmas --write-protect-code --no-dual-map-code --stacktrace-every=100
// SharedObjects=ffi_test_functions
import 'dart:ffi';
import 'callback_tests_utils.dart';
final testcases = [
CallbackTest("SumVeryManySmallInts",
Pointer.fromFunction<NativeVeryManyIntsOp>(sumVeryManySmallInts, 0)),
CallbackTest(
"SumVeryManyFloatsDoubles",
Pointer.fromFunction<NativeVeryManyFloatsDoublesOp>(
sumVeryManyDoubles, 0.0)),
];
void main() {
for (int i = 0; i < 100; ++i) {
testcases.forEach((t) => t.run());
}
}
int sumVeryManySmallInts(
int _1,
int _2,
int _3,
int _4,
int _5,
int _6,
int _7,
int _8,
int _9,
int _10,
int _11,
int _12,
int _13,
int _14,
int _15,
int _16,
int _17,
int _18,
int _19,
int _20,
int _21,
int _22,
int _23,
int _24,
int _25,
int _26,
int _27,
int _28,
int _29,
int _30,
int _31,
int _32,
int _33,
int _34,
int _35,
int _36,
int _37,
int _38,
int _39,
int _40) {
print("sumVeryManySmallInts(" +
"$_1, $_2, $_3, $_4, $_5, $_6, $_7, $_8, $_9, $_10, " +
"$_11, $_12, $_13, $_14, $_15, $_16, $_17, $_18, $_19, $_20, " +
"$_21, $_22, $_23, $_24, $_25, $_26, $_27, $_28, $_29, $_30, " +
"$_31, $_32, $_33, $_34, $_35, $_36, $_37, $_38, $_39, $_40)");
return _1 +
_2 +
_3 +
_4 +
_5 +
_6 +
_7 +
_8 +
_9 +
_10 +
_11 +
_12 +
_13 +
_14 +
_15 +
_16 +
_17 +
_18 +
_19 +
_20 +
_21 +
_22 +
_23 +
_24 +
_25 +
_26 +
_27 +
_28 +
_29 +
_30 +
_31 +
_32 +
_33 +
_34 +
_35 +
_36 +
_37 +
_38 +
_39 +
_40;
}
double sumVeryManyDoubles(
double _1,
double _2,
double _3,
double _4,
double _5,
double _6,
double _7,
double _8,
double _9,
double _10,
double _11,
double _12,
double _13,
double _14,
double _15,
double _16,
double _17,
double _18,
double _19,
double _20,
double _21,
double _22,
double _23,
double _24,
double _25,
double _26,
double _27,
double _28,
double _29,
double _30,
double _31,
double _32,
double _33,
double _34,
double _35,
double _36,
double _37,
double _38,
double _39,
double _40) {
print("sumVeryManyDoubles(" +
"$_1, $_2, $_3, $_4, $_5, $_6, $_7, $_8, $_9, $_10, " +
"$_11, $_12, $_13, $_14, $_15, $_16, $_17, $_18, $_19, $_20, " +
"$_21, $_22, $_23, $_24, $_25, $_26, $_27, $_28, $_29, $_30, " +
"$_31, $_32, $_33, $_34, $_35, $_36, $_37, $_38, $_39, $_40)");
return _1 +
_2 +
_3 +
_4 +
_5 +
_6 +
_7 +
_8 +
_9 +
_10 +
_11 +
_12 +
_13 +
_14 +
_15 +
_16 +
_17 +
_18 +
_19 +
_20 +
_21 +
_22 +
_23 +
_24 +
_25 +
_26 +
_27 +
_28 +
_29 +
_30 +
_31 +
_32 +
_33 +
_34 +
_35 +
_36 +
_37 +
_38 +
_39 +
_40;
}
typedef NativeVeryManyIntsOp = Int16 Function(
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16,
Int8,
Int16);
typedef NativeVeryManyFloatsDoublesOp = Double Function(
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double,
Float,
Double);