github.com/hslam/atomic@v1.0.0/bool_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 TestBool(t *testing.T) { 12 addr := NewBool(false) 13 if addr.Load() != false { 14 t.Error(addr.Load()) 15 } 16 17 addr.Store(true) 18 if addr.Load() != true { 19 t.Error(addr.Load()) 20 } 21 var delta = true 22 if addr.Add(delta) != true { 23 t.Error(addr.Load()) 24 } 25 if addr.Load() != true { 26 t.Error(addr.Load()) 27 } 28 var new = false 29 if addr.Swap(new) != true { 30 t.Error(addr.Load()) 31 } 32 var old = new 33 new = true 34 if !addr.CompareAndSwap(old, new) { 35 t.Error(addr.Load()) 36 } 37 if addr.CompareAndSwap(old, new) { 38 t.Error(addr.Load()) 39 } 40 } 41 42 func TestAddBool(t *testing.T) { 43 addr := NewBool(false) 44 var wg sync.WaitGroup 45 for i := 0; i < 8192; i++ { 46 wg.Add(1) 47 go func() { 48 defer wg.Done() 49 addr.Add(false) 50 }() 51 } 52 wg.Wait() 53 } 54 55 func TestCompareAndSwapBool(t *testing.T) { 56 addr := NewBool(false) 57 var wg sync.WaitGroup 58 for i := 0; i < 8192; i++ { 59 wg.Add(1) 60 go func() { 61 defer wg.Done() 62 addr.CompareAndSwap(false, true) 63 }() 64 } 65 wg.Wait() 66 } 67 68 func TestSwapBool(t *testing.T) { 69 addr := NewBool(false) 70 var wg sync.WaitGroup 71 for i := 0; i < 8192; i++ { 72 wg.Add(1) 73 go func() { 74 defer wg.Done() 75 addr.Swap(false) 76 }() 77 } 78 wg.Wait() 79 } 80 81 func BenchmarkSwapBool(b *testing.B) { 82 addr := NewBool(false) 83 for i := 0; i < b.N; i++ { 84 addr.Swap(false) 85 } 86 } 87 88 func BenchmarkCompareAndSwapBool(b *testing.B) { 89 addr := NewBool(false) 90 for i := 0; i < b.N; i++ { 91 addr.CompareAndSwap(false, true) 92 } 93 } 94 95 func BenchmarkAddBool(b *testing.B) { 96 addr := NewBool(false) 97 for i := 0; i < b.N; i++ { 98 addr.Add(false) 99 } 100 } 101 102 func BenchmarkStoreBool(b *testing.B) { 103 addr := NewBool(false) 104 for i := 0; i < b.N; i++ { 105 addr.Store(false) 106 } 107 } 108 109 func BenchmarkLoadBool(b *testing.B) { 110 addr := NewBool(false) 111 for i := 0; i < b.N; i++ { 112 addr.Load() 113 } 114 }