| | package main |
| |
|
| | import ( |
| | "runtime" |
| | "testing" |
| | ) |
| |
|
| | func checkDivByZero(f func()) (divByZero bool) { |
| | defer func() { |
| | if r := recover(); r != nil { |
| | if e, ok := r.(runtime.Error); ok && e.Error() == "runtime error: integer divide by zero" { |
| | divByZero = true |
| | } |
| | } |
| | }() |
| | f() |
| | return false |
| | } |
| |
|
| | |
| | func div_a(i uint, s []int) int { |
| | return s[i%uint(len(s))] |
| | } |
| |
|
| | |
| | func div_b(i uint, j uint) uint { |
| | return i / j |
| | } |
| |
|
| | |
| | func div_c(i int) int { |
| | return 7 / (i - i) |
| | } |
| |
|
| | func TestDivByZero(t *testing.T) { |
| | if got := checkDivByZero(func() { div_b(7, 0) }); !got { |
| | t.Errorf("expected div by zero for b(7, 0), got no error\n") |
| | } |
| | if got := checkDivByZero(func() { div_b(7, 7) }); got { |
| | t.Errorf("expected no error for b(7, 7), got div by zero\n") |
| | } |
| | if got := checkDivByZero(func() { div_a(4, nil) }); !got { |
| | t.Errorf("expected div by zero for a(4, nil), got no error\n") |
| | } |
| | if got := checkDivByZero(func() { div_c(5) }); !got { |
| | t.Errorf("expected div by zero for c(5), got no error\n") |
| | } |
| | } |
| |
|