| /* | |
| * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license | |
| * that can be found in the LICENSE file. | |
| */ | |
| // WITH_PLATFORM_LIBS | |
| import kotlin.test.* | |
| import kotlinx.cinterop.* | |
| import platform.iconv.* | |
| import platform.posix.size_tVar | |
| @OptIn(kotlinx.cinterop.ExperimentalForeignApi::class) | |
| fun box(): String { | |
| val sourceByteArray = "Hello!".encodeToByteArray() | |
| val golden = listOf(0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x21) | |
| memScoped { | |
| val sourceLength = alloc<size_tVar>() | |
| val destLength = alloc<size_tVar>() | |
| val sourceBytes = allocArrayOf(sourceByteArray) | |
| val destBytes = allocArray<ByteVar>(golden.size) | |
| val sourcePtr = alloc<CArrayPointerVar<ByteVar>>() | |
| sourcePtr.value = sourceBytes | |
| val destPtr = alloc<CArrayPointerVar<ByteVar>>() | |
| destPtr.value = destBytes | |
| sourceLength.value = sourceByteArray.size.convert() | |
| destLength.value = golden.size.convert() | |
| val conversion = iconv_open("UTF-8", "LATIN1") | |
| iconv(conversion, sourcePtr.ptr, sourceLength.ptr, destPtr.ptr, destLength.ptr) | |
| golden.forEachIndexed { index, it -> | |
| assertEquals(it, destBytes[index].toInt()) | |
| } | |
| iconv_close(conversion) | |
| } | |
| return "OK" | |
| } |