141 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package cache
 | 
						|
 | 
						|
import (
 | 
						|
	"math"
 | 
						|
	"strconv"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
)
 | 
						|
 | 
						|
func TestIncr(t *testing.T) {
 | 
						|
	// int
 | 
						|
	var originVal interface{} = int(1)
 | 
						|
	var updateVal interface{} = int(2)
 | 
						|
	val, err := incr(originVal)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = incr(int(1<<(strconv.IntSize-1) - 1))
 | 
						|
	assert.Equal(t, ErrIncrementOverflow, err)
 | 
						|
 | 
						|
	// int32
 | 
						|
	originVal = int32(1)
 | 
						|
	updateVal = int32(2)
 | 
						|
	val, err = incr(originVal)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = incr(int32(math.MaxInt32))
 | 
						|
	assert.Equal(t, ErrIncrementOverflow, err)
 | 
						|
 | 
						|
	// int64
 | 
						|
	originVal = int64(1)
 | 
						|
	updateVal = int64(2)
 | 
						|
	val, err = incr(originVal)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = incr(int64(math.MaxInt64))
 | 
						|
	assert.Equal(t, ErrIncrementOverflow, err)
 | 
						|
 | 
						|
	// uint
 | 
						|
	originVal = uint(1)
 | 
						|
	updateVal = uint(2)
 | 
						|
	val, err = incr(originVal)
 | 
						|
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = incr(uint(1<<(strconv.IntSize) - 1))
 | 
						|
	assert.Equal(t, ErrIncrementOverflow, err)
 | 
						|
 | 
						|
	// uint32
 | 
						|
	originVal = uint32(1)
 | 
						|
	updateVal = uint32(2)
 | 
						|
	val, err = incr(originVal)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = incr(uint32(math.MaxUint32))
 | 
						|
	assert.Equal(t, ErrIncrementOverflow, err)
 | 
						|
 | 
						|
	// uint64
 | 
						|
	originVal = uint64(1)
 | 
						|
	updateVal = uint64(2)
 | 
						|
	val, err = incr(originVal)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = incr(uint64(math.MaxUint64))
 | 
						|
	assert.Equal(t, ErrIncrementOverflow, err)
 | 
						|
	// other type
 | 
						|
	_, err = incr("string")
 | 
						|
	assert.Equal(t, ErrNotIntegerType, err)
 | 
						|
}
 | 
						|
 | 
						|
func TestDecr(t *testing.T) {
 | 
						|
	// int
 | 
						|
	var originVal interface{} = int(2)
 | 
						|
	var updateVal interface{} = int(1)
 | 
						|
	val, err := decr(originVal)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = decr(int(-1 << (strconv.IntSize - 1)))
 | 
						|
	assert.Equal(t, ErrDecrementOverflow, err)
 | 
						|
	// int32
 | 
						|
	originVal = int32(2)
 | 
						|
	updateVal = int32(1)
 | 
						|
	val, err = decr(originVal)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = decr(int32(math.MinInt32))
 | 
						|
	assert.Equal(t, ErrDecrementOverflow, err)
 | 
						|
 | 
						|
	// int64
 | 
						|
	originVal = int64(2)
 | 
						|
	updateVal = int64(1)
 | 
						|
	val, err = decr(originVal)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = decr(int64(math.MinInt64))
 | 
						|
	assert.Equal(t, ErrDecrementOverflow, err)
 | 
						|
 | 
						|
	// uint
 | 
						|
	originVal = uint(2)
 | 
						|
	updateVal = uint(1)
 | 
						|
	val, err = decr(originVal)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = decr(uint(0))
 | 
						|
	assert.Equal(t, ErrDecrementOverflow, err)
 | 
						|
 | 
						|
	// uint32
 | 
						|
	originVal = uint32(2)
 | 
						|
	updateVal = uint32(1)
 | 
						|
	val, err = decr(originVal)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = decr(uint32(0))
 | 
						|
	assert.Equal(t, ErrDecrementOverflow, err)
 | 
						|
 | 
						|
	// uint64
 | 
						|
	originVal = uint64(2)
 | 
						|
	updateVal = uint64(1)
 | 
						|
	val, err = decr(originVal)
 | 
						|
	assert.Nil(t, err)
 | 
						|
	assert.Equal(t, val, updateVal)
 | 
						|
 | 
						|
	_, err = decr(uint64(0))
 | 
						|
	assert.Equal(t, ErrDecrementOverflow, err)
 | 
						|
 | 
						|
	// other type
 | 
						|
	_, err = decr("string")
 | 
						|
	assert.Equal(t, ErrNotIntegerType, err)
 | 
						|
}
 |