...

Source file src/github.com/launchdarkly/go-server-sdk/v6/internal/concurrent_test.go

Documentation: github.com/launchdarkly/go-server-sdk/v6/internal

     1  package internal
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  )
     8  
     9  func TestAtomicBoolean(t *testing.T) {
    10  	t.Run("defaults to false", func(t *testing.T) {
    11  		var b AtomicBoolean
    12  		assert.False(t, b.Get())
    13  	})
    14  
    15  	t.Run("Set", func(t *testing.T) {
    16  		var b AtomicBoolean
    17  		b.Set(true)
    18  		assert.True(t, b.Get())
    19  		b.Set(false)
    20  		assert.False(t, b.Get())
    21  	})
    22  
    23  	t.Run("GetAndSet", func(t *testing.T) {
    24  		var b AtomicBoolean
    25  		assert.False(t, b.GetAndSet(true))
    26  		assert.True(t, b.Get())
    27  		assert.True(t, b.GetAndSet(false))
    28  		assert.False(t, b.Get())
    29  	})
    30  
    31  	t.Run("data race", func(t *testing.T) {
    32  		// should be flagged by race detector if our implementation is unsafer
    33  		done := make(chan struct{})
    34  		var b AtomicBoolean
    35  		go func() {
    36  			for i := 0; i < 100; i++ {
    37  				b.Set(true)
    38  			}
    39  			done <- struct{}{}
    40  		}()
    41  		go func() {
    42  			for i := 0; i < 100; i++ {
    43  				b.Get()
    44  			}
    45  			done <- struct{}{}
    46  		}()
    47  		<-done
    48  		<-done
    49  	})
    50  }
    51  

View as plain text