Affix
view release on metacpan or search on metacpan
t/004_typedef.t view on Meta::CPAN
use v5.40;
use lib '../lib', 'lib';
use blib;
use Test2::Tools::Affix qw[:all];
use Affix qw[:all];
#
$|++;
#
note 'Defining named types for subsequent tests.';
subtest 'Define multiple types' => sub {
ok typedef( Point => Struct [ x => SInt32, y => SInt32 ] ), 'typedef @Point';
ok typedef( Rect => Struct [ top_left => Point(), bottom_right => Point() ] ), 'typedef @Rect';
ok typedef( RectPlus => Struct [ top_left => Point(), bottom_right => Point(), Pointer [Char] ] ), 'typedef @RectPlus';
ok typedef( MyStruct => Struct [ id => SInt32, value => Float64, label => Pointer [Char] ] ), 'typedef @MyStruct';
ok typedef( MyUnion => Union [ i => SInt32, f => Float32, c => Array [ Char, 8 ] ] ), 'typedef @MyUnion';
};
my $C_CODE = <<'END_C';
#include "std.h"
//ext: .c
#include <stdint.h>
#include <stdbool.h>
#include <string.h> // For strcmp
#include <stdlib.h> // For malloc
typedef struct {
int32_t id;
double value;
const char* label;
} MyStruct;
typedef enum { RED, GREEN, BLUE } Color;
DLLEXPORT int check_color(Color c) {
if (c == GREEN) return 1;
return 0;
}
DLLEXPORT int sum_struct_ids(MyStruct* structs, int count) {
int total = 0;
for (int i = 0; i < count; i++) {
total += structs[i].id;
}
return total;
}
typedef struct {
int x;
int y;
} Point;
DLLEXPORT Point create_point(int x, int y) {
Point p = {x, y};
return p;
}
DLLEXPORT int sum_point_by_val(Point p) {
return p.x + p.y;
}
( run in 0.524 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )