1BEGIN {
2    chdir 't' if -d 't';
3
4    @INC = '../lib';
5
6    require Config; import Config;
7
8    my $reason;
9
10    if ($Config{'extensions'} !~ /\bIPC\/SysV\b/) {
11      $reason = 'IPC::SysV was not built';
12    } elsif ($Config{'d_sem'} ne 'define') {
13      $reason = '$Config{d_sem} undefined';
14    } elsif ($Config{'d_msg'} ne 'define') {
15      $reason = '$Config{d_msg} undefined';
16    }
17    if ($reason) {
18	print "1..0 # Skip: $reason\n";
19	exit 0;
20    }
21}
22
23use IPC::SysV qw(
24	SETALL
25	IPC_PRIVATE
26	IPC_CREAT
27	IPC_RMID
28	IPC_NOWAIT
29	IPC_STAT
30	S_IRWXU
31	S_IRWXG
32	S_IRWXO
33);
34use IPC::Semaphore;
35
36print "1..10\n";
37
38my $sem =
39    new IPC::Semaphore(IPC_PRIVATE, 10, S_IRWXU | S_IRWXG | S_IRWXO | IPC_CREAT)
40    || die "semget: ",$!+0," $!\n";
41
42print "ok 1\n";
43
44my $st = $sem->stat || print "not ";
45print "ok 2\n";
46
47$sem->setall( (0) x 10) || print "not ";
48print "ok 3\n";
49
50my @sem = $sem->getall;
51print "not " unless join("",@sem) eq "0000000000";
52print "ok 4\n";
53
54$sem[2] = 1;
55$sem->setall( @sem ) || print "not ";
56print "ok 5\n";
57
58@sem = $sem->getall;
59print "not " unless join("",@sem) eq "0010000000";
60print "ok 6\n";
61
62my $ncnt = $sem->getncnt(0);
63print "not " if $sem->getncnt(0) || !defined($ncnt);
64print "ok 7\n";
65
66$sem->op(2,-1,IPC_NOWAIT) || print "not ";
67print "ok 8\n";
68
69print "not " if $sem->getncnt(0);
70print "ok 9\n";
71
72END {
73	(defined $sem && $sem->remove) || print "not ";
74	print "ok 10\n";
75}
76