github.com/hslam/atomic@v1.0.0/float32_test.go (about) 1 // Copyright (c) 2020 Meng Huang (mhboy@outlook.com) 2 // This package is licensed under a MIT license that can be found in the LICENSE file. 3 4 package atomic 5 6 import ( 7 "sync" 8 "testing" 9 ) 10 11 func TestFloat32(t *testing.T) { 12 addr := NewFloat32(3.4e38) 13 if addr.Load() != 3.4e38 { 14 t.Error(addr.Load()) 15 } 16 addr.Store(0.2) 17 if addr.Load() != 0.2 { 18 t.Error(addr.Load()) 19 } 20 var delta = float32(0.2) 21 if addr.Add(delta) != 0.4 { 22 t.Error(addr.Load()) 23 } 24 if addr.Load() != 0.4 { 25 t.Error(addr.Load()) 26 } 27 var new = float32(0.5) 28 if addr.Swap(new) != 0.4 { 29 t.Error(addr.Load()) 30 } 31 var old = new 32 new = 0.6 33 if !addr.CompareAndSwap(old, new) { 34 t.Error(addr.Load()) 35 } 36 if addr.CompareAndSwap(old, new) { 37 t.Error(addr.Load()) 38 } 39 } 40 41 func TestAddFloat32(t *testing.T) { 42 addr := NewFloat32(0.1) 43 var wg sync.WaitGroup 44 for i := 0; i < 8192; i++ { 45 wg.Add(1) 46 go func() { 47 defer wg.Done() 48 addr.Add(0.1) 49 }() 50 } 51 wg.Wait() 52 } 53 54 func TestCompareAndSwapFloat32(t *testing.T) { 55 addr := NewFloat32(0.1) 56 var wg sync.WaitGroup 57 for i := 0; i < 8192; i++ { 58 wg.Add(1) 59 go func() { 60 defer wg.Done() 61 addr.CompareAndSwap(0.1, 0.2) 62 }() 63 } 64 wg.Wait() 65 } 66 67 func TestSwapFloat32(t *testing.T) { 68 addr := NewFloat32(0.1) 69 var wg sync.WaitGroup 70 for i := 0; i < 8192; i++ { 71 wg.Add(1) 72 go func() { 73 defer wg.Done() 74 addr.Swap(0.1) 75 }() 76 } 77 wg.Wait() 78 }