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