The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use Config qw(%Config);
use Test;
use Win32;

my $fork_emulation = $Config{ccflags} =~ /PERL_IMPLICIT_SYS/;

my $tests = $fork_emulation ? 4 : 2;
plan tests => $tests;

my $pid = $$+0; # make sure we don't copy any magic to $pid

if ($^O eq "cygwin") {
    skip(!defined &Cygwin::pid_to_winpid,
	 Cygwin::pid_to_winpid($pid),
	 Win32::GetCurrentProcessId());
}
else {
    ok($pid, Win32::GetCurrentProcessId());
}

if ($fork_emulation) {
    # This test relies on the implementation detail that the fork() emulation
    # uses the negative value of the thread id as a pseudo process id.
    if (my $child = fork) {
	waitpid($child, 0);
	exit 0;
    }
    ok(-$$, Win32::GetCurrentThreadId());

    # GetCurrentProcessId() should still return the real PID
    ok($pid, Win32::GetCurrentProcessId());
    ok($$ != Win32::GetCurrentProcessId());
}
else {
    # here we just want to see something.
    ok(Win32::GetCurrentThreadId() > 0);
}