aboutsummaryrefslogtreecommitdiffstats
path: root/common/math/integer_test.go
blob: 198114e5e14b8092dc1ba57ad3e04d903efdd713 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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)
        }
    }
}