Dragonfly2
230 строк · 4.8 Кб
1/*
2* Copyright 2020 The Dragonfly Authors
3*
4* Licensed under the Apache License, Version 2.0 (the "License");
5* you may not use this file except in compliance with the License.
6* You may obtain a copy of the License at
7*
8* http://www.apache.org/licenses/LICENSE-2.0
9*
10* Unless required by applicable law or agreed to in writing, software
11* distributed under the License is distributed on an "AS IS" BASIS,
12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13* See the License for the specific language governing permissions and
14* limitations under the License.
15*/
16
17package set
18
19import (
20"testing"
21
22"github.com/stretchr/testify/assert"
23)
24
25func TestSetAdd(t *testing.T) {
26tests := []struct {
27name string
28value string
29expect func(t *testing.T, ok bool, s Set[string], value string)
30}{
31{
32name: "add value",
33value: "foo",
34expect: func(t *testing.T, ok bool, s Set[string], value string) {
35assert := assert.New(t)
36assert.Equal(ok, true)
37assert.Equal(s.Values(), []string{value})
38},
39},
40{
41name: "add value failed",
42value: "foo",
43expect: func(t *testing.T, _ bool, s Set[string], value string) {
44assert := assert.New(t)
45ok := s.Add("foo")
46assert.Equal(ok, false)
47assert.Equal(s.Values(), []string{value})
48},
49},
50}
51
52for _, tc := range tests {
53t.Run(tc.name, func(t *testing.T) {
54s := New[string]()
55tc.expect(t, s.Add(tc.value), s, tc.value)
56})
57}
58}
59
60func TestSetDelete(t *testing.T) {
61tests := []struct {
62name string
63value string
64expect func(t *testing.T, s Set[string], value string)
65}{
66{
67name: "delete value",
68value: "foo",
69expect: func(t *testing.T, s Set[string], value string) {
70assert := assert.New(t)
71s.Delete(value)
72assert.Equal(s.Len(), uint(0))
73},
74},
75{
76name: "delete value does not exist",
77value: "foo",
78expect: func(t *testing.T, s Set[string], _ string) {
79assert := assert.New(t)
80s.Delete("bar")
81assert.Equal(s.Len(), uint(1))
82},
83},
84}
85
86for _, tc := range tests {
87t.Run(tc.name, func(t *testing.T) {
88s := New[string]()
89s.Add(tc.value)
90tc.expect(t, s, tc.value)
91})
92}
93}
94
95func TestSetContains(t *testing.T) {
96tests := []struct {
97name string
98value string
99expect func(t *testing.T, s Set[string], value string)
100}{
101{
102name: "contains value",
103value: "foo",
104expect: func(t *testing.T, s Set[string], value string) {
105assert := assert.New(t)
106assert.Equal(s.Contains(value), true)
107},
108},
109{
110name: "contains value does not exist",
111value: "foo",
112expect: func(t *testing.T, s Set[string], _ string) {
113assert := assert.New(t)
114assert.Equal(s.Contains("bar"), false)
115},
116},
117}
118
119for _, tc := range tests {
120t.Run(tc.name, func(t *testing.T) {
121s := New[string]()
122s.Add(tc.value)
123tc.expect(t, s, tc.value)
124})
125}
126}
127
128func TestSetLen(t *testing.T) {
129tests := []struct {
130name string
131expect func(t *testing.T, s Set[string])
132}{
133{
134name: "get length",
135expect: func(t *testing.T, s Set[string]) {
136assert := assert.New(t)
137s.Add("foo")
138assert.Equal(s.Len(), uint(1))
139},
140},
141{
142name: "get empty set length",
143expect: func(t *testing.T, s Set[string]) {
144assert := assert.New(t)
145assert.Equal(s.Len(), uint(0))
146},
147},
148}
149
150for _, tc := range tests {
151t.Run(tc.name, func(t *testing.T) {
152s := New[string]()
153tc.expect(t, s)
154})
155}
156}
157
158func TestSetValues(t *testing.T) {
159tests := []struct {
160name string
161expect func(t *testing.T, s Set[string])
162}{
163{
164name: "get values",
165expect: func(t *testing.T, s Set[string]) {
166assert := assert.New(t)
167s.Add("foo")
168assert.Equal(s.Values(), []string{"foo"})
169},
170},
171{
172name: "get empty values",
173expect: func(t *testing.T, s Set[string]) {
174assert := assert.New(t)
175assert.Equal(s.Values(), []string(nil))
176},
177},
178{
179name: "get multi values",
180expect: func(t *testing.T, s Set[string]) {
181assert := assert.New(t)
182s.Add("foo")
183s.Add("bar")
184assert.Contains(s.Values(), "bar")
185assert.Contains(s.Values(), "foo")
186},
187},
188}
189
190for _, tc := range tests {
191t.Run(tc.name, func(t *testing.T) {
192s := New[string]()
193tc.expect(t, s)
194})
195}
196}
197
198func TestSetClear(t *testing.T) {
199tests := []struct {
200name string
201expect func(t *testing.T, s Set[string])
202}{
203{
204name: "clear empty set",
205expect: func(t *testing.T, s Set[string]) {
206assert := assert.New(t)
207s.Clear()
208assert.Equal(s.Values(), []string(nil))
209},
210},
211{
212name: "clear set",
213expect: func(t *testing.T, s Set[string]) {
214assert := assert.New(t)
215assert.Equal(s.Add("foo"), true)
216s.Clear()
217assert.Equal(s.Values(), []string(nil))
218assert.Equal(s.Add("foo"), true)
219assert.Equal(s.Values(), []string{"foo"})
220},
221},
222}
223
224for _, tc := range tests {
225t.Run(tc.name, func(t *testing.T) {
226s := New[string]()
227tc.expect(t, s)
228})
229}
230}
231