Edge-case tests check values near special boundaries such as zero.

edge case An edge case is an input that sits near a boundary where behavior may change.

Edge Cases

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

sub safe_divide {
    my ($total, $count) = @_;
    return $count == 0 ? "none" : $total / $count;
}

my $count = 2;
my $result = safe_divide(10, $count);
my $status = $result eq "none" ? "guarded" : "computed";

print "count=$count\n";
print "result=$result\n";
print "status=$status\n";
use strict;
use warnings;

sub safe_divide {
    my ($total, $count) = @_;
    return $count == 0 ? "none" : $total / $count;
}

my $count = 0;
my $result = safe_divide(10, $count);
my $status = $result eq "none" ? "guarded" : "computed";

print "count=$count\n";
print "result=$result\n";
print "status=$status\n";
use strict;
use warnings;

sub safe_divide {
    my ($total, $count) = @_;
    return $count == 0 ? "none" : $total / $count;
}

my $count = 5;
my $result = safe_divide(10, $count);
my $status = $result eq "none" ? "guarded" : "computed";

print "count=$count\n";
print "result=$result\n";
print "status=$status\n";
  1. $count ← 2

    9my $count→ 2 = 2; #@count=0, 510my $result = safe_divide(10, $count2);11my $status = $result eq "none" ? "guarded" : "computed";
  2. $total ← 10, $count ← 2

    4sub safe_divide {5    my ($total→ 10, $count→ 2) = @_;6    return $count2 == 0 ? "none" : $total10 / $count;7}
  3. $result ← 5, $status ← computed

    9my $count = 2; #@count=0, 510my $result→ 5 = safe_divide(10, $count2);11my $status→ computed = $result5 eq "none" ? "guarded" : "computed";1213print "count=$count2\n";14print "result=$result5\n";15print "status=$statuscomputed\n";
    outputcount=2
    result=5
    status=computed
  1. $count ← 0

    9my $count→ 0 = 0;10my $result = safe_divide(10, $count0);11my $status = $result eq "none" ? "guarded" : "computed";
  2. $total ← 10, $count ← 0

    4sub safe_divide {5    my ($total→ 10, $count→ 0) = @_;6    return $count0 == 0 ? "none" : $total10 / $count;7}
  3. $result ← none, $status ← guarded

    9my $count = 0;10my $result→ none = safe_divide(10, $count0);11my $status→ guarded = $resultnone eq "none" ? "guarded" : "computed";1213print "count=$count0\n";14print "result=$resultnone\n";15print "status=$statusguarded\n";
    outputcount=0
    result=none
    status=guarded
  1. $count ← 5

    9my $count→ 5 = 5;10my $result = safe_divide(10, $count5);11my $status = $result eq "none" ? "guarded" : "computed";
  2. $total ← 10, $count ← 5

    4sub safe_divide {5    my ($total→ 10, $count→ 5) = @_;6    return $count5 == 0 ? "none" : $total10 / $count;7}
  3. $result ← 2, $status ← computed

    9my $count = 5;10my $result→ 2 = safe_divide(10, $count5);11my $status→ computed = $result2 eq "none" ? "guarded" : "computed";1213print "count=$count5\n";14print "result=$result2\n";15print "status=$statuscomputed\n";
    outputcount=5
    result=2
    status=computed