From 3bbcd38f0b76c2ea29b18cd671a0237bd0941123 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Wed, 6 May 2020 17:43:19 +0700 Subject: [PATCH] [Interop][Test] Add tests for pointers and arrays --- backend.native/tests/build.gradle | 10 ++++++++++ .../tests/interop/basics/arrayPointers.kt | 16 ++++++++++++++++ .../tests/interop/basics/carrayPointers.def | 8 ++++++++ 3 files changed, 34 insertions(+) create mode 100644 backend.native/tests/interop/basics/arrayPointers.kt create mode 100644 backend.native/tests/interop/basics/carrayPointers.def diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index 9080910d320..dcd400fe26f 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -3473,6 +3473,10 @@ createInterop("cunion") { it.defFile 'interop/basics/cunion.def' } +createInterop("carrayPointers") { + it.defFile 'interop/basics/carrayPointers.def' +} + createInterop("auxiliaryCppSources") { // We need to provide empty def file to create correct `KonanInteropTask`. it.defFile 'interop/auxiliary_sources/auxiliaryCppSources.def' @@ -3728,6 +3732,12 @@ interopTest("interop_union") { source = "interop/basics/union.kt" } +interopTest("interop_array_pointers") { + disabled = (project.testTarget == 'wasm32') // No interop for wasm yet. + interop = 'carrayPointers' + source = "interop/basics/arrayPointers.kt" +} + task interop_convert(type: KonanLocalTest) { source = "codegen/intrinsics/interop_convert.kt" } diff --git a/backend.native/tests/interop/basics/arrayPointers.kt b/backend.native/tests/interop/basics/arrayPointers.kt new file mode 100644 index 00000000000..06ea7067b47 --- /dev/null +++ b/backend.native/tests/interop/basics/arrayPointers.kt @@ -0,0 +1,16 @@ +import carrayPointers.* +import kotlin.test.* +import kotlinx.cinterop.* + +fun main() { + arrayPointer = globalArray + assertEquals(globalArray[0], arrayPointer!![0]) + arrayPointer!![0] = 15 + assertEquals(15, globalArray[0]) + + memScoped { + val struct = alloc() + struct.arrayPointer = globalArray + assertEquals(globalArray[0], struct.arrayPointer!![0]) + } +} \ No newline at end of file diff --git a/backend.native/tests/interop/basics/carrayPointers.def b/backend.native/tests/interop/basics/carrayPointers.def new file mode 100644 index 00000000000..ddd358781ea --- /dev/null +++ b/backend.native/tests/interop/basics/carrayPointers.def @@ -0,0 +1,8 @@ +--- +int (*arrayPointer)[1]; + +int globalArray[3] = {1, 2, 3}; + +struct StructWithArrayPtr { + int (*arrayPointer)[1]; +}; \ No newline at end of file