1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
use File::Spec;
use lib (File::Spec->catdir(File::Spec->updir(),'blib','lib'), File::Spec->catdir(File::Spec->curdir(),'blib','lib'));
use strict;
use Test;
use diagnostics;
use Inline Config => DIRECTORY => '_Inline_test';
plan(tests => 3,
todo => [],
onfail => sub {},
);
my $obj = Soldier->new('Benjamin', 'Private', 11111);
ok($obj->get_serial == 11111);
ok($obj->get_name eq 'Benjamin');
ok($obj->get_rank eq 'Private');
package Soldier;
use Inline C => Config =>
USING => 'ParseRegExp',
TYPEMAPS => ['t/typemap', 't/soldier_typemap'];
use Inline C => <<'END';
typedef struct {
char* name;
char* rank;
long serial;
} Soldier;
Soldier * new(char* class, char* name, char* rank, long serial) {
Soldier* soldier;
New(42, soldier, 1, Soldier);
soldier->name = savepv(name);
soldier->rank = savepv(rank);
soldier->serial = serial;
return soldier;
}
char* get_name(Soldier * obj) {
return obj->name;
}
char* get_rank(Soldier * obj) {
return obj->rank;
}
long get_serial(Soldier * obj) {
return obj->serial;
}
void DESTROY(Soldier* obj) {
Safefree(obj->name);
Safefree(obj->rank);
Safefree(obj);
}
END
|