Convert-Binary-C
view release on metacpan or search on metacpan
tests/223_initializer.t view on Meta::CPAN
################################################################################
#
# Copyright (c) 2002-2024 Marcus Holland-Moritz. All rights reserved.
# This program is free software; you can redistribute it and/or modify
# it under the same terms as Perl itself.
#
################################################################################
use Test;
use Convert::Binary::C @ARGV;
$^W = 1;
BEGIN { plan tests => 27 }
my $CCCFG = require './tests/include/config.pl';
$c = eval { Convert::Binary::C->new( %$CCCFG ) };
ok($@,'',"failed to create Convert::Binary::C objects");
eval { $c->parse_file( 'tests/include/include.c' ) };
ok($@,'',"failed to parse C-file");
$full = $zero = $c->sourcify;
for( $c->typedef_names ) {
next if $c->sizeof($_) == 0;
my $pre = "\n$_ S_$_ = ";
my $post = ";\n";
my $init = $c->unpack( $_, $c->pack($_) );
$zero .= $pre . $c->initializer( $_ ) . $post;
$full .= $pre . $c->initializer( $_, $init ) . $post;
}
$c = eval { Convert::Binary::C->new };
ok($@,'',"failed to create Convert::Binary::C objects");
{
my @warn;
local $SIG{__WARN__} = sub { push @warn, $_[0] };
eval { $c->clean->parse( $zero ) };
ok($@,'',"failed to parse zero initialization code");
eval { $c->clean->parse( $full ) };
ok($@,'',"failed to parse full initialization code");
ok( @warn == 0 );
}
for my $snip ( split /={40,}/, do { local $/; <DATA> } ) {
my($code, @tests) = split /-{40,}/, $snip;
eval { $c->clean->parse($code) };
ok($@,'',"failed to parse code snippet");
for my $test ( @tests ) {
$test =~ s/#.*//gm;
my($data, $id, $ref) = $test =~ /^\s*(?:\$\s*=\s*(.*?))?\s*(\w+)\s*=\s*(.*?)\s*$/;
my $init = defined $data
? $c->initializer( $id, eval $data )
: $c->initializer( $id );
$init =~ s/\s+//g;
$ref =~ s/\s+//g;
print "# ref : $ref\n# init: $init\n";
ok( $init, $ref, "wrong return value" );
}
}
__DATA__
/* check that only the first union member is initialized */
typedef union {
int c[10];
struct {
char a, b;
( run in 0.563 second using v1.01-cache-2.11-cpan-39bf76dae61 )