Affix
view release on metacpan or search on metacpan
t/013_callbacks.t view on Meta::CPAN
use v5.40;
use lib '../lib', 'lib';
use blib;
use Test2::Tools::Affix qw[:all];
use Affix qw[:all];
#
$|++;
#
# 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
typedef struct {
int x;
int y;
} Point;
typedef struct {
Point top_left;
Point bottom_right;
char label[16];
} Rect;
// A callback with many arguments to test register/stack passing
typedef void (*kitchen_sink_cb)(
int a, double b, int c, double d, int e, double f, int g, double h,
const char* i, int* j
);
DLLEXPORT int call_kitchen_sink(kitchen_sink_cb cb) {
int j_val = 100;
cb(1, 2.0, 3, 4.0, 5, 6.0, 7, 8.0, "kitchen sink", &j_val);
return j_val + 1;
}
typedef int (*IntMap)(int);
DLLEXPORT int map_int(int val, IntMap cb) {
return cb(val);
}
typedef void (*RectInspector)(Rect*);
DLLEXPORT void inspect_rect(Rect* r, RectInspector cb) {
cb(r);
}
typedef Point (*PointGenerator)(void);
DLLEXPORT int check_point_gen(PointGenerator cb) {
Point p = cb();
return p.x + p.y;
}
typedef union {
int i;
float f;
char c[8];
} MyUnion;
DLLEXPORT int invoke_union_cb(void (*cb)(MyUnion*)) {
MyUnion u;
u.i = 42;
cb(&u);
return u.i;
( run in 0.582 second using v1.01-cache-2.11-cpan-39bf76dae61 )