The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#$Id: 02_amb.t,v 1.2 2008/07/07 11:22:44 dk Exp $
use strict;
use warnings;

use Test::More tests => 7;

use Amb;

my $g = 0;
if ( amb(1,0)) {
	$g += 5;
	die;
} else {
	$g--;
}
ok($g == 4, 'die main');

sub x
{
	$g = 0;
	if ( amb(1,0)) {
		$g += 5;
		die;
	} else {
		$g--;
	}
}
x();
ok($g == 4, 'die insub');

$g = 0;
if (amb(0,1)) {
	$g += 5;
	die;
} else {
	$g--;
}
ok($g == -1, 'nodie main');

sub x2
{
	$g = 0;
	if ( amb(0,1)) {
		$g += 5;
		die;
	} else {
		$g--;
	}
}
x2();
ok($g == -1, 'nodie insub');

#
$g = 0;
if ( amb(1,0)) {
	$g += 5;
	if ( amb(1,0)) {
		$g += 5;
		die;
	} else {
		$g--;
	}
} else {
	$g--;
}
ok($g == 9, 'nested');

# eval
$g = 0;
if ( amb(1,0)) {
	eval { 
		die;
	};
	$g++;
}
ok( $g == 1, 'eval');

# recursive
$g = 0;
my $depth = 0;
sub x3
{
	if ( amb(1,0)) {
		if ($depth) {
			$g += 10;
			die;
			$g += 10;
		} else {
			$depth++;
			$g += 100;
			x3();
			$g += 100;
		}
	} else {
		$g++;
		$g+= $depth * 3;
	}
}
x3();
ok( $g == 214, 'recursive');