A test plan states how many checks a file expects to run.

plan-counts Plan counts help a test runner notice when a file exits too early or runs more checks than expected.

Plan Counts

planned
plan_counts.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;

my $planned = 3;
my @checks = ("ok", "ok", "not ok");
my $ran = scalar @checks;
my $plan_line = "1..$planned";
my $status = $planned == $ran ? "matched" : "mismatch";

print "plan=$plan_line\n";
print "ran=$ran\n";
print "status=$status\n";
use strict;
use warnings;

my $planned = 2;
my @checks = ("ok", "ok", "not ok");
my $ran = scalar @checks;
my $plan_line = "1..$planned";
my $status = $planned == $ran ? "matched" : "mismatch";

print "plan=$plan_line\n";
print "ran=$ran\n";
print "status=$status\n";
use strict;
use warnings;

my $planned = 4;
my @checks = ("ok", "ok", "not ok");
my $ran = scalar @checks;
my $plan_line = "1..$planned";
my $status = $planned == $ran ? "matched" : "mismatch";

print "plan=$plan_line\n";
print "ran=$ran\n";
print "status=$status\n";
  1. $planned ← 3, @checks ← 3, $ran ← 3, $plan_line ← 1..3, $status ← matched

    4my $planned→ 3 = 3; #@planned=2, 45my @checks→ 3 = ("ok", "ok", "not ok");6my $ran→ 3 = scalar @checks3;7my $plan_line→ 1..3 = "1..$planned3";8my $status→ matched = $planned3 == $ran3 ? "matched" : "mismatch";910print "plan=$plan_line1..3\n";11print "ran=$ran3\n";12print "status=$statusmatched\n";
    outputplan=1..3
    ran=3
    status=matched
  1. $planned ← 2, @checks ← 3, $ran ← 3, $plan_line ← 1..2, $status ← mismatch

    4my $planned→ 2 = 2;5my @checks→ 3 = ("ok", "ok", "not ok");6my $ran→ 3 = scalar @checks3;7my $plan_line→ 1..2 = "1..$planned2";8my $status→ mismatch = $planned2 == $ran3 ? "matched" : "mismatch";910print "plan=$plan_line1..2\n";11print "ran=$ran3\n";12print "status=$statusmismatch\n";
    outputplan=1..2
    ran=3
    status=mismatch
  1. $planned ← 4, @checks ← 3, $ran ← 3, $plan_line ← 1..4, $status ← mismatch

    4my $planned→ 4 = 4;5my @checks→ 3 = ("ok", "ok", "not ok");6my $ran→ 3 = scalar @checks3;7my $plan_line→ 1..4 = "1..$planned4";8my $status→ mismatch = $planned4 == $ran3 ? "matched" : "mismatch";910print "plan=$plan_line1..4\n";11print "ran=$ran3\n";12print "status=$statusmismatch\n";
    outputplan=1..4
    ran=3
    status=mismatch