Skip to content

Commit 4fa2b01

Browse files
dcharkescommit-bot@chromium.org
authored andcommitted
[vm/ffi] Add tests with very many arguments
To address the comment about tests from https://dart-review.googlesource.com/c/sdk/+/124136/3/runtime/bin/ffi_test/ffi_test_functions.cc Issue: #36309 Change-Id: Ib6b56db22d44603d31006f3f099ab25a8a9c6d55 Cq-Include-Trybots: luci.dart.try:vm-ffi-android-debug-arm-try,vm-ffi-android-debug-arm64-try,app-kernel-linux-debug-x64-try,vm-kernel-linux-debug-ia32-try,vm-kernel-win-debug-x64-try,vm-kernel-win-debug-ia32-try,vm-kernel-precomp-linux-debug-x64-try,vm-dartkb-linux-release-x64-abi-try,vm-kernel-precomp-android-release-arm64-try,vm-kernel-asan-linux-release-x64-try,vm-kernel-linux-release-simarm-try,vm-kernel-linux-release-simarm64-try,vm-kernel-precomp-android-release-arm_x64-try,vm-kernel-precomp-obfuscate-linux-release-x64-try,dart-sdk-linux-try,analyzer-analysis-server-linux-try,analyzer-linux-release-try,front-end-linux-release-x64-try,vm-kernel-precomp-win-release-x64-try Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/132843 Commit-Queue: Daco Harkes <[email protected]> Reviewed-by: Martin Kustermann <[email protected]>
1 parent e047ece commit 4fa2b01

9 files changed

+976
-112
lines changed

runtime/bin/ffi_test/ffi_test_functions.cc

Lines changed: 257 additions & 13 deletions
Large diffs are not rendered by default.

tests/ffi/callback_tests_utils.dart

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
import 'dart:ffi';
6+
7+
import 'dylib_utils.dart';
8+
9+
import "package:expect/expect.dart";
10+
11+
final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
12+
13+
typedef NativeCallbackTest = Int32 Function(Pointer);
14+
typedef NativeCallbackTestFn = int Function(Pointer);
15+
16+
class CallbackTest {
17+
final String name;
18+
final Pointer callback;
19+
final bool skip;
20+
21+
CallbackTest(this.name, this.callback, {bool skipIf: false})
22+
: skip = skipIf {}
23+
24+
void run() {
25+
if (skip) return;
26+
27+
final NativeCallbackTestFn tester = ffiTestFunctions
28+
.lookupFunction<NativeCallbackTest, NativeCallbackTestFn>("Test$name");
29+
final int testCode = tester(callback);
30+
if (testCode != 0) {
31+
Expect.fail("Test $name failed.");
32+
}
33+
}
34+
}

tests/ffi/function_callbacks_many_test.dart

Lines changed: 2 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,7 @@
1616

1717
import 'dart:ffi';
1818

19-
import "package:expect/expect.dart";
20-
21-
import 'dylib_utils.dart';
22-
23-
typedef NativeCallbackTest = Int32 Function(Pointer);
24-
typedef NativeCallbackTestFn = int Function(Pointer);
25-
26-
final DynamicLibrary testLibrary = dlopenPlatformSpecific("ffi_test_functions");
27-
28-
class Test {
29-
final String name;
30-
final Pointer callback;
31-
final bool skip;
32-
33-
Test(this.name, this.callback, {bool skipIf: false}) : skip = skipIf {}
34-
35-
void run() {
36-
if (skip) return;
37-
38-
final NativeCallbackTestFn tester = testLibrary
39-
.lookupFunction<NativeCallbackTest, NativeCallbackTestFn>("Test$name");
40-
final int testCode = tester(callback);
41-
if (testCode != 0) {
42-
Expect.fail("Test $name failed.");
43-
}
44-
}
45-
}
19+
import 'callback_tests_utils.dart';
4620

4721
typedef SimpleAdditionType = Int32 Function(Int32, Int32);
4822
int simpleAddition(int x, int y) => x + y;
@@ -1064,6 +1038,6 @@ void testManyCallbacks() {
10641038
pointers.add(Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 999));
10651039

10661040
for (final pointer in pointers) {
1067-
Test("SimpleAddition", pointer).run();
1041+
CallbackTest("SimpleAddition", pointer).run();
10681042
}
10691043
}

tests/ffi/function_callbacks_test.dart

Lines changed: 21 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,7 @@
1616

1717
import 'dart:ffi';
1818

19-
import "package:expect/expect.dart";
20-
21-
import 'dylib_utils.dart';
22-
23-
typedef NativeCallbackTest = Int32 Function(Pointer);
24-
typedef NativeCallbackTestFn = int Function(Pointer);
25-
26-
final DynamicLibrary testLibrary = dlopenPlatformSpecific("ffi_test_functions");
27-
28-
class Test {
29-
final String name;
30-
final Pointer callback;
31-
final bool skip;
32-
33-
Test(this.name, this.callback, {bool skipIf: false}) : skip = skipIf {}
34-
35-
void run() {
36-
if (skip) return;
37-
38-
final NativeCallbackTestFn tester = testLibrary
39-
.lookupFunction<NativeCallbackTest, NativeCallbackTestFn>("Test$name");
40-
final int testCode = tester(callback);
41-
if (testCode != 0) {
42-
Expect.fail("Test $name failed.");
43-
}
44-
}
45-
}
19+
import 'callback_tests_utils.dart';
4620

4721
typedef SimpleAdditionType = Int32 Function(Int32, Int32);
4822
int simpleAddition(int x, int y) {
@@ -212,34 +186,36 @@ int returnMaxUint8v2() {
212186
return 0xabcff;
213187
}
214188

215-
final List<Test> testcases = [
216-
Test("SimpleAddition",
189+
final testcases = [
190+
CallbackTest("SimpleAddition",
217191
Pointer.fromFunction<SimpleAdditionType>(simpleAddition, 0)),
218-
Test("IntComputation",
192+
CallbackTest("IntComputation",
219193
Pointer.fromFunction<IntComputationType>(intComputation, 0)),
220-
Test("UintComputation",
194+
CallbackTest("UintComputation",
221195
Pointer.fromFunction<UintComputationType>(uintComputation, 0)),
222-
Test("SimpleMultiply",
196+
CallbackTest("SimpleMultiply",
223197
Pointer.fromFunction<SimpleMultiplyType>(simpleMultiply, 0.0)),
224-
Test("SimpleMultiplyFloat",
198+
CallbackTest("SimpleMultiplyFloat",
225199
Pointer.fromFunction<SimpleMultiplyFloatType>(simpleMultiplyFloat, 0.0)),
226-
Test("ManyInts", Pointer.fromFunction<ManyIntsType>(manyInts, 0)),
227-
Test("ManyDoubles", Pointer.fromFunction<ManyDoublesType>(manyDoubles, 0.0)),
228-
Test("ManyArgs", Pointer.fromFunction<ManyArgsType>(manyArgs, 0.0)),
229-
Test("Store", Pointer.fromFunction<StoreType>(store)),
230-
Test("NullPointers", Pointer.fromFunction<NullPointersType>(nullPointers)),
231-
Test("ReturnVoid", Pointer.fromFunction<ReturnVoid>(returnVoid)),
232-
Test("ThrowExceptionDouble",
200+
CallbackTest("ManyInts", Pointer.fromFunction<ManyIntsType>(manyInts, 0)),
201+
CallbackTest(
202+
"ManyDoubles", Pointer.fromFunction<ManyDoublesType>(manyDoubles, 0.0)),
203+
CallbackTest("ManyArgs", Pointer.fromFunction<ManyArgsType>(manyArgs, 0.0)),
204+
CallbackTest("Store", Pointer.fromFunction<StoreType>(store)),
205+
CallbackTest(
206+
"NullPointers", Pointer.fromFunction<NullPointersType>(nullPointers)),
207+
CallbackTest("ReturnVoid", Pointer.fromFunction<ReturnVoid>(returnVoid)),
208+
CallbackTest("ThrowExceptionDouble",
233209
Pointer.fromFunction<ThrowExceptionDouble>(throwExceptionDouble, 42.0)),
234-
Test("ThrowExceptionPointer",
210+
CallbackTest("ThrowExceptionPointer",
235211
Pointer.fromFunction<ThrowExceptionPointer>(throwExceptionPointer)),
236-
Test("ThrowException",
212+
CallbackTest("ThrowException",
237213
Pointer.fromFunction<ThrowExceptionInt>(throwExceptionInt, 42)),
238-
Test("TakeMaxUint8x10",
214+
CallbackTest("TakeMaxUint8x10",
239215
Pointer.fromFunction<TakeMaxUint8x10Type>(takeMaxUint8x10, 0)),
240-
Test("ReturnMaxUint8",
216+
CallbackTest("ReturnMaxUint8",
241217
Pointer.fromFunction<ReturnMaxUint8Type>(returnMaxUint8, 0)),
242-
Test("ReturnMaxUint8",
218+
CallbackTest("ReturnMaxUint8",
243219
Pointer.fromFunction<ReturnMaxUint8Type>(returnMaxUint8v2, 0)),
244220
];
245221

0 commit comments

Comments
 (0)