From 1cd19c2f469a0b8d76879ecb4e7cf3e1aac86393 Mon Sep 17 00:00:00 2001 From: Yota Toyama Date: Sat, 18 Nov 2017 18:41:59 +0900 Subject: [PATCH] Create semaphore object --- semaphore.go | 17 +++++++++++++++++ semaphore_test.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 semaphore.go create mode 100644 semaphore_test.go diff --git a/semaphore.go b/semaphore.go new file mode 100644 index 0000000..ae8383d --- /dev/null +++ b/semaphore.go @@ -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 +} diff --git a/semaphore_test.go b/semaphore_test.go new file mode 100644 index 0000000..c5a199e --- /dev/null +++ b/semaphore_test.go @@ -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)) +}