Testing Basics
Edge Cases
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
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";
$count ← 2
9my $count→ 2 = 2; #@count=0, 510my $result = safe_divide(10, $count2);11my $status = $result eq "none" ? "guarded" : "computed";$total ← 10, $count ← 2
4sub safe_divide {5 my ($total→ 10, $count→ 2) = @_;6 return $count2 == 0 ? "none" : $total10 / $count;7}$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
$count ← 0
9my $count→ 0 = 0;10my $result = safe_divide(10, $count0);11my $status = $result eq "none" ? "guarded" : "computed";$total ← 10, $count ← 0
4sub safe_divide {5 my ($total→ 10, $count→ 0) = @_;6 return $count0 == 0 ? "none" : $total10 / $count;7}$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
$count ← 5
9my $count→ 5 = 5;10my $result = safe_divide(10, $count5);11my $status = $result eq "none" ? "guarded" : "computed";$total ← 10, $count ← 5
4sub safe_divide {5 my ($total→ 10, $count→ 5) = @_;6 return $count5 == 0 ? "none" : $total10 / $count;7}$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