mirror of https://github.com/nmasse-itix/liche.git
2 changed files with 45 additions and 0 deletions
@ -0,0 +1,17 @@ |
|||
package main |
|||
|
|||
type semaphore struct { |
|||
channel chan bool |
|||
} |
|||
|
|||
func newSemaphore(n int) semaphore { |
|||
return semaphore{make(chan bool, n)} |
|||
} |
|||
|
|||
func (s semaphore) Request() { |
|||
s.channel <- true |
|||
} |
|||
|
|||
func (s semaphore) Release() { |
|||
<-s.channel |
|||
} |
|||
@ -0,0 +1,28 @@ |
|||
package main |
|||
|
|||
import ( |
|||
"testing" |
|||
|
|||
"github.com/stretchr/testify/assert" |
|||
) |
|||
|
|||
func TestNewSemaphore(t *testing.T) { |
|||
newSemaphore(1) |
|||
} |
|||
|
|||
func TestSemaphoreRequest(t *testing.T) { |
|||
s := newSemaphore(1) |
|||
|
|||
s.Request() |
|||
|
|||
assert.Equal(t, 1, len(s.channel)) |
|||
} |
|||
|
|||
func TestSemaphoreRelease(t *testing.T) { |
|||
s := newSemaphore(1) |
|||
|
|||
s.Request() |
|||
s.Release() |
|||
|
|||
assert.Equal(t, 0, len(s.channel)) |
|||
} |
|||
Loading…
Reference in new issue