mirror of https://github.com/q191201771/naza
package nazaatomic: new package.
parent
f321842ecc
commit
550ff8e40e
@ -0,0 +1,143 @@
|
||||
// Copyright 2019, Chef. All rights reserved.
|
||||
// https://github.com/q191201771/naza
|
||||
//
|
||||
// Use of this source code is governed by a MIT-style license
|
||||
// that can be found in the License file.
|
||||
//
|
||||
// Author: Chef (191201771@qq.com)
|
||||
|
||||
package nazaatomic
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/q191201771/naza/pkg/assert"
|
||||
)
|
||||
|
||||
func TestBool(t *testing.T) {
|
||||
var v Bool
|
||||
assert.Equal(t, false, v.Load())
|
||||
v.Store(true)
|
||||
assert.Equal(t, true, v.Load())
|
||||
assert.Equal(t, false, v.CompareAndSwap(false, true))
|
||||
assert.Equal(t, true, v.Load())
|
||||
assert.Equal(t, true, v.CompareAndSwap(true, false))
|
||||
assert.Equal(t, false, v.Load())
|
||||
assert.Equal(t, false, v.Swap(true))
|
||||
assert.Equal(t, true, v.Load())
|
||||
}
|
||||
|
||||
func TestInt32(t *testing.T) {
|
||||
var v Int32
|
||||
assert.Equal(t, int32(0), v.Load())
|
||||
v.Store(123)
|
||||
assert.Equal(t, int32(123), v.Load())
|
||||
v.Add(100)
|
||||
assert.Equal(t, int32(223), v.Load())
|
||||
v.Sub(200)
|
||||
assert.Equal(t, int32(23), v.Load())
|
||||
v.Increment()
|
||||
assert.Equal(t, int32(24), v.Load())
|
||||
v.Decrement()
|
||||
assert.Equal(t, int32(23), v.Load())
|
||||
assert.Equal(t, false, v.CompareAndSwap(0, 100))
|
||||
assert.Equal(t, int32(23), v.Load())
|
||||
assert.Equal(t, true, v.CompareAndSwap(23, 100))
|
||||
assert.Equal(t, int32(100), v.Load())
|
||||
assert.Equal(t, int32(100), v.Swap(200))
|
||||
assert.Equal(t, int32(200), v.Load())
|
||||
|
||||
// 非常规操作
|
||||
v.Add(-50)
|
||||
assert.Equal(t, int32(150), v.Load())
|
||||
v.Sub(-60)
|
||||
assert.Equal(t, int32(210), v.Load())
|
||||
|
||||
// 越界
|
||||
v.Store(0)
|
||||
v.Add(2147483647)
|
||||
assert.Equal(t, int32(2147483647), v.Load())
|
||||
v.Add(1)
|
||||
assert.Equal(t, int32(-2147483648), v.Load())
|
||||
v.Add(1)
|
||||
assert.Equal(t, int32(-2147483647), v.Load())
|
||||
}
|
||||
|
||||
func TestUint32(t *testing.T) {
|
||||
var v Uint32
|
||||
assert.Equal(t, uint32(0), v.Load())
|
||||
v.Store(123)
|
||||
assert.Equal(t, uint32(123), v.Load())
|
||||
v.Add(100)
|
||||
assert.Equal(t, uint32(223), v.Load())
|
||||
v.Sub(200)
|
||||
assert.Equal(t, uint32(23), v.Load())
|
||||
v.Increment()
|
||||
assert.Equal(t, uint32(24), v.Load())
|
||||
v.Decrement()
|
||||
assert.Equal(t, uint32(23), v.Load())
|
||||
assert.Equal(t, false, v.CompareAndSwap(0, 100))
|
||||
assert.Equal(t, uint32(23), v.Load())
|
||||
assert.Equal(t, true, v.CompareAndSwap(23, 100))
|
||||
assert.Equal(t, uint32(100), v.Load())
|
||||
assert.Equal(t, uint32(100), v.Swap(200))
|
||||
assert.Equal(t, uint32(200), v.Load())
|
||||
|
||||
// 越界
|
||||
v.Store(0)
|
||||
v.Add(4294967295)
|
||||
assert.Equal(t, uint32(4294967295), v.Load())
|
||||
v.Add(1)
|
||||
assert.Equal(t, uint32(0), v.Load())
|
||||
v.Add(1)
|
||||
assert.Equal(t, uint32(1), v.Load())
|
||||
}
|
||||
|
||||
func TestInt64(t *testing.T) {
|
||||
var v Int64
|
||||
assert.Equal(t, int64(0), v.Load())
|
||||
v.Store(123)
|
||||
assert.Equal(t, int64(123), v.Load())
|
||||
v.Add(100)
|
||||
assert.Equal(t, int64(223), v.Load())
|
||||
v.Sub(200)
|
||||
assert.Equal(t, int64(23), v.Load())
|
||||
v.Increment()
|
||||
assert.Equal(t, int64(24), v.Load())
|
||||
v.Decrement()
|
||||
assert.Equal(t, int64(23), v.Load())
|
||||
assert.Equal(t, false, v.CompareAndSwap(0, 100))
|
||||
assert.Equal(t, int64(23), v.Load())
|
||||
assert.Equal(t, true, v.CompareAndSwap(23, 100))
|
||||
assert.Equal(t, int64(100), v.Load())
|
||||
assert.Equal(t, int64(100), v.Swap(200))
|
||||
assert.Equal(t, int64(200), v.Load())
|
||||
|
||||
// 非常规操作
|
||||
v.Add(-50)
|
||||
assert.Equal(t, int64(150), v.Load())
|
||||
v.Sub(-60)
|
||||
assert.Equal(t, int64(210), v.Load())
|
||||
}
|
||||
|
||||
|
||||
func TestUint64(t *testing.T) {
|
||||
var v Uint64
|
||||
assert.Equal(t, uint64(0), v.Load())
|
||||
v.Store(123)
|
||||
assert.Equal(t, uint64(123), v.Load())
|
||||
v.Add(100)
|
||||
assert.Equal(t, uint64(223), v.Load())
|
||||
v.Sub(200)
|
||||
assert.Equal(t, uint64(23), v.Load())
|
||||
v.Increment()
|
||||
assert.Equal(t, uint64(24), v.Load())
|
||||
v.Decrement()
|
||||
assert.Equal(t, uint64(23), v.Load())
|
||||
assert.Equal(t, false, v.CompareAndSwap(0, 100))
|
||||
assert.Equal(t, uint64(23), v.Load())
|
||||
assert.Equal(t, true, v.CompareAndSwap(23, 100))
|
||||
assert.Equal(t, uint64(100), v.Load())
|
||||
assert.Equal(t, uint64(100), v.Swap(200))
|
||||
assert.Equal(t, uint64(200), v.Load())
|
||||
}
|
Loading…
Reference in New Issue