The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use warnings;
use File::Spec;
use Test::More tests => 5;
use Symbol qw(gensym);
use IPC::Open3;
use Config;

my $input  = File::Spec->catfile(qw( t local ptr_cast_test.c ));
my $output = File::Spec->catfile(qw( t local ptr_cast_test   ));

unlink $output;

my $out = gensym();
my $err = gensym();

my @extraargs;
my $cmd;
if($^O eq 'MSWin32' && $Config{cc} eq 'cl') {
  push(@extraargs, '/nologo ' . $Config{libs});
  $cmd = "$Config{cc} /Fe$output $input " . join(' ', @extraargs);
}
else {
    push(@extraargs, '-Zexe') if $^O eq 'os2';
    $cmd = "$Config{cc} -o $output $input " . join(' ', @extraargs)
}
diag( "compiling test program with: $cmd" );
my $pid = open3(undef, $out, $err, $cmd);
waitpid $pid, 0;

is( $?, 0, 'compiling ptr_cast_test.c' );

is( do { local $/ = undef; <$err>}, '', 'STDERR empty after compiling' );

$pid = open3(undef, $out, $err, "./$output");
waitpid $pid, 0;

is( $?, 0, './ptr_cast_test exited with 0' );

like( do { local $/ = undef; <$out> }, qr/ptr_cast_test:\s+ok\s+/, 'casting pointer integer and back worked' );
ok( !do { local $/ = undef; <$err> }, 'STDERR empty after running' );