xref: /openbsd-src/gnu/usr.bin/perl/t/porting/args_assert.t (revision d13be5d47e4149db2549a9828e244d59dbc43f15)
1#!perl
2
3use strict;
4use warnings;
5
6require './test.pl';
7
8plan('no_plan');
9
10# Fail for every PERL_ARGS_ASSERT* macro that was declared but not used.
11
12my %declared;
13my %used;
14
15my $prefix = '';
16
17unless (-d 't' && -f 'MANIFEST') {
18    # we'll assume that we are in t then.
19    # All files are interal to perl, so Unix-style is sufficiently portable.
20    $prefix = '../';
21}
22
23{
24    my $proto = $prefix . 'proto.h';
25
26    open my $fh, '<', $proto or die "Can't open $proto: $!";
27
28    while (<$fh>) {
29	$declared{$1}++ if /^#define\s+(PERL_ARGS_ASSERT[A-Za-z_]+)\s+/;
30    }
31}
32
33cmp_ok(scalar keys %declared, '>', 0, 'Some macros were declared');
34
35if (!@ARGV) {
36    my $manifest = $prefix . 'MANIFEST';
37    open my $fh, '<', $manifest or die "Can't open $manifest: $!";
38    while (<$fh>) {
39	# *.c or */*.c
40	push @ARGV, $prefix . $1 if m!^((?:[^/]+/)?[^/]+\.c)\t!;
41    }
42}
43
44while (<>) {
45    $used{$1}++ if /^\s+(PERL_ARGS_ASSERT_[A-Za-z_]+);$/;
46}
47
48my %unused;
49
50foreach (keys %declared) {
51    $unused{$_}++ unless $used{$_};
52}
53
54if (keys %unused) {
55    fail("$_ is declared but not used") foreach sort keys %unused;
56} else {
57    pass('Every PERL_ARGS_ASSERT* macro declared is used');
58}
59