| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package math
- import (
- gmath "math"
- "testing"
- )
- type operation byte
- const (
- sub operation = iota
- add
- mul
- )
- func TestOverflow(t *testing.T) {
- for i, test := range []struct {
- x uint64
- y uint64
- overflow bool
- op operation
- }{
- // add operations
- {gmath.MaxUint64, 1, true, add},
- {gmath.MaxUint64 - 1, 1, false, add},
- // sub operations
- {0, 1, true, sub},
- {0, 0, false, sub},
- // mul operations
- {10, 10, false, mul},
- {gmath.MaxUint64, 2, true, mul},
- {gmath.MaxUint64, 1, false, mul},
- } {
- var overflows bool
- switch test.op {
- case sub:
- _, overflows = SafeSub(test.x, test.y)
- case add:
- _, overflows = SafeAdd(test.x, test.y)
- case mul:
- _, overflows = SafeMul(test.x, test.y)
- }
- if test.overflow != overflows {
- t.Errorf("%d failed. Expected test to be %v, got %v", i, test.overflow, overflows)
- }
- }
- }
|