view erlang/erldc/test/linkload_SUITE.erl @ 54:918dab7a6606

- added callback support (comes with some bigger refactoring) - allow CPython's Py{CObject,Capsule} to be used as 'p'ointers
author Tassilo Philipp
date Tue, 02 Feb 2021 20:42:02 +0100
parents 0cfcc391201f
children
line wrap: on
line source

%%  Copyright (c) 2014 Erik Mackdanz <erikmack@gmail.com>

%%  Permission to use, copy, modify, and distribute this software for any
%%  purpose with or without fee is hereby granted, provided that the above
%%  copyright notice and this permission notice appear in all copies.

%%  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
%%  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
%%  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
%%  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
%%  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
%%  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
%%  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.          

-module(linkload_SUITE).
-compile(export_all).

-define(VMSZ, 1024).

all() ->
    [create_vm,
     create_vm_badsz,
     load_lib,
     no_such_lib,
     bad_lib,
     bad_sym,
     bad_sym_2,
     load_sym
    ].

create_vm(_) ->
    {ok,Vm} = dyncall:new_call_vm(?VMSZ),
    true = is_binary(Vm).

create_vm_badsz(_) ->
    {error,bad_vm_size} = dyncall:new_call_vm("Hello badarg").

load_lib(_) ->
    {ok,Lib} = dyncall:load_library("libm"),
    true = is_binary(Lib).
    
no_such_lib(_) ->
    {error,lib_not_found} = dyncall:load_library("foobarbaz").

bad_lib(_) ->
    {error,invalid_lib} = dyncall:load_library(12).

bad_sym(_) ->
    {ok,Lib} = dyncall:load_library("libm"),
    {error,symbol_not_found} = dyncall:find_symbol(Lib,"bogussymbol").
    
bad_sym_2(_) ->
    {ok,Lib} = dyncall:load_library("libm"),
    {error,invalid_symbol} = dyncall:find_symbol(Lib,9).
    
load_sym(_) ->
    {ok,Lib} = dyncall:load_library("libm"),
    {ok,_Partner} = dyncall:find_symbol(Lib,"sqrt").