From aa13b21d5f3440ab3b8556f94698ac78d7d77727 Mon Sep 17 00:00:00 2001 From: Yusuke Sakurai Date: Tue, 27 Jan 2026 18:07:32 +0900 Subject: [PATCH] make set.NewSet initializable --- .github/workflows/push.yml | 38 +++++++++++++++++++------------------- go.mod | 2 +- set/set.go | 14 +++++++++----- set/set_test.go | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 25 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 5d01bf6..59bc770 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -1,19 +1,19 @@ - on: push - name: CI - jobs: - test: - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - with: - go-version: 1.18 - - name: Check Tidy - run: | - go mod tidy - git diff --exit-code - - name: Check Format - run: | - make fmt - git diff --exit-code - - run: make test \ No newline at end of file +on: push +name: CI +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-go@v6 + with: + go-version: 1.25.x + - name: Check Tidy + run: | + go mod tidy + git diff --exit-code + - name: Check Format + run: | + make fmt + git diff --exit-code + - run: make test diff --git a/go.mod b/go.mod index eb13e38..ae8e1a0 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/loilo-inc/logos/v2 -go 1.18 +go 1.25 require github.com/stretchr/testify v1.7.0 diff --git a/set/set.go b/set/set.go index a5fd088..0680c04 100644 --- a/set/set.go +++ b/set/set.go @@ -22,7 +22,7 @@ func (i *set[T]) Has(v T) bool { func (i *set[T]) Size() int { cnt := 0 - i.m.Range(func(key, value interface{}) bool { + i.m.Range(func(key, value any) bool { cnt += 1 return true }) @@ -38,14 +38,14 @@ func (i *set[T]) Delete(v T) { } func (i *set[T]) ForEach(f func(i T) bool) { - i.m.Range(func(key, value interface{}) bool { + i.m.Range(func(key, value any) bool { return f(key.(T)) }) } func (i *set[T]) Values() []T { var ret []T - i.m.Range(func(key, value interface{}) bool { + i.m.Range(func(key, value any) bool { v := key.(T) ret = append(ret, v) return true @@ -53,6 +53,10 @@ func (i *set[T]) Values() []T { return ret } -func NewSet[T comparable]() Set[T] { - return &set[T]{} +func NewSet[T comparable](args ...T) Set[T] { + s := &set[T]{} + for _, v := range args { + s.Add(v) + } + return s } diff --git a/set/set_test.go b/set/set_test.go index 74a69ee..e506d74 100644 --- a/set/set_test.go +++ b/set/set_test.go @@ -57,3 +57,35 @@ func TestSet(t *testing.T) { assert.True(t, s.Has(val2)) }) } +func TestNewSet(t *testing.T) { + t.Run("empty", func(t *testing.T) { + s := set.NewSet[int]() + assert.Equal(t, 0, s.Size()) + assert.Empty(t, s.Values()) + }) + t.Run("with single value", func(t *testing.T) { + s := set.NewSet(1) + assert.Equal(t, 1, s.Size()) + assert.True(t, s.Has(1)) + assert.Equal(t, []int{1}, s.Values()) + }) + t.Run("with multiple values", func(t *testing.T) { + s := set.NewSet(1, 2, 3) + assert.Equal(t, 3, s.Size()) + assert.True(t, s.Has(1)) + assert.True(t, s.Has(2)) + assert.True(t, s.Has(3)) + assert.ElementsMatch(t, []int{1, 2, 3}, s.Values()) + }) + t.Run("with duplicate values", func(t *testing.T) { + s := set.NewSet(1, 2, 2, 3, 1) + assert.Equal(t, 3, s.Size()) + assert.ElementsMatch(t, []int{1, 2, 3}, s.Values()) + }) + t.Run("with string type", func(t *testing.T) { + s := set.NewSet("a", "b", "c") + assert.Equal(t, 3, s.Size()) + assert.True(t, s.Has("a")) + assert.ElementsMatch(t, []string{"a", "b", "c"}, s.Values()) + }) +}