nim-ffi/tests/test_alloc.nim
Ivan FB df2277e726
Fix memleaks (#11)
* protect against mem leak in case of failures sending requests to ffi thread
* better cleanup if failures in createFFIContext
* avoid dangling cstring in handleRes under ARC/ORC
* better resource cleanup in destroyFFIContext
* invoke onNotResponding if failure in destroyFFIContext
* correct seq copy in alloc
* make sure the lock is init before cleanUpResources
* better possible exception handling in processReq
* guard allocSharedSeq if given seq is empty
* enhance error handling in ffi_context
* add new tests and some corrections
2026-04-27 21:22:45 +02:00

72 lines
1.8 KiB
Nim

import unittest2
import ../ffi/alloc
suite "alloc(cstring)":
test "nil input returns empty cstring":
let s: cstring = nil
let res = alloc(s)
check res != nil
check res[0] == '\0'
deallocShared(res)
test "copies content":
let res = alloc("hello world".cstring)
check $res == "hello world"
deallocShared(res)
test "empty cstring":
let res = alloc("".cstring)
check len(res) == 0
deallocShared(res)
suite "alloc(string)":
test "copies content":
let res = alloc("test string")
check $res == "test string"
deallocShared(res)
test "empty string":
let res = alloc("")
check len(res) == 0
deallocShared(res)
test "string with special characters":
let res = alloc("abc\0xyz")
check res[0] == 'a'
deallocShared(res)
suite "allocSharedSeq / deallocSharedSeq / toSeq":
test "roundtrip int seq":
let original = @[1, 2, 3, 4, 5]
var shared = allocSharedSeq(original)
check shared.len == 5
let back = toSeq(shared)
check back == original
deallocSharedSeq(shared)
check shared.len == 0
test "empty seq":
let original: seq[int] = @[]
var shared = allocSharedSeq(original)
check shared.len == 0
check shared.data == nil
let back = toSeq(shared)
check back.len == 0
deallocSharedSeq(shared)
test "preserves element values by index":
let original = @[10, 20, 30]
var shared = allocSharedSeq(original)
check shared.data[0] == 10
check shared.data[1] == 20
check shared.data[2] == 30
deallocSharedSeq(shared)
test "works with byte seq":
let original = @[byte(0xFF), byte(0x00), byte(0xAB)]
var shared = allocSharedSeq(original)
check shared.len == 3
let back = toSeq(shared)
check back == original
deallocSharedSeq(shared)