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) } } }