Affix
view release on metacpan or search on metacpan
t/007_pointers.t view on Meta::CPAN
use v5.40;
use lib '../lib', 'lib';
use blib;
use Test2::Tools::Affix qw[:all];
use Affix qw[:all];
use Config;
#
$|++;
#
# This C code will be compiled into a temporary library for many of the tests.
my $C_CODE = <<'END_C';
#include "std.h"
//ext: .c
#include <stdlib.h>
#include <string.h>
DLLEXPORT const char* get_hello_string() { return "Hello from C"; }
DLLEXPORT bool set_hello_string(const char * hi) { return strcmp(hi, "Hello from Perl")==0; }
DLLEXPORT int read_int_from_void_ptr(void* p) {
if (!p) return -999;
return *(int*)p;
}
DLLEXPORT int sum_int_array(int* arr, int count) {
int total = 0;
for (int i = 0; i < count; i++)
total += arr[i];
return total;
}
DLLEXPORT bool check_is_null(void* p) {
return (p == NULL);
}
// Dereferences a pointer and returns its value + 10.
DLLEXPORT int deref_and_add(int* p) {
if (!p) return -1;
return *p + 10;
}
DLLEXPORT void modify_int_ptr(int* p, int new_val) {
if (p) *p = new_val + 1;
}
DLLEXPORT int check_string_ptr_ptr(char** s) {
if (s && *s && strcmp(*s, "perl") == 0) {
// Modify the inner pointer to prove we can
*s = "C changed me";
return 1; // success
}
return 0; // failure
}
typedef struct {
int32_t id;
double value;
const char* label;
} MyStruct;
MyStruct g_struct = { 99, -1.0, "Global" };
( run in 0.640 second using v1.01-cache-2.11-cpan-39bf76dae61 )