Skip to content

Commit 9ec0cd0

Browse files
committed
hashset: add a bunch of examples
1 parent 84a76ab commit 9ec0cd0

1 file changed

Lines changed: 281 additions & 18 deletions

File tree

examples_hashset_test.go

Lines changed: 281 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ package set
55

66
import (
77
"fmt"
8+
"sort"
89
)
910

1011
type person struct {
@@ -25,23 +26,122 @@ func ExampleHashSet_Insert() {
2526
s.Insert(&person{name: "dave", id: 108})
2627
s.Insert(&person{name: "armon", id: 101})
2728
s.Insert(&person{name: "mitchell", id: 100})
29+
s.Insert(&person{name: "armon", id: 101})
2830

2931
fmt.Println(s)
32+
3033
// Output:
3134
// [armon dave mitchell]
3235
}
3336

34-
// InsertSlice
37+
func ExampleHashSet_InsertSlice() {
38+
s := NewHashSet[*person, string](10)
39+
s.InsertSlice([]*person{
40+
{name: "dave", id: 108},
41+
{name: "mitchell", id: 100},
42+
{name: "dave", id: 108},
43+
{name: "armon", id: 101},
44+
})
45+
46+
fmt.Println(s)
47+
48+
// Output:
49+
// [armon dave mitchell]
50+
}
51+
52+
func ExampleHashSet_InsertSet() {
53+
anna := &person{name: "anna", id: 94}
54+
bill := &person{name: "bill", id: 50}
55+
carl := &person{name: "carl", id: 10}
56+
dave := &person{name: "dave", id: 32}
57+
s1 := HashSetFrom[*person, string]([]*person{anna, carl})
58+
s2 := HashSetFrom[*person, string]([]*person{carl, dave, bill})
59+
s2.InsertSet(s1)
60+
61+
fmt.Println(s1)
62+
fmt.Println(s2)
63+
64+
// Output:
65+
// [anna carl]
66+
// [anna bill carl dave]
67+
}
68+
69+
func ExampleHashSet_Remove() {
70+
anna := &person{name: "anna", id: 94}
71+
bill := &person{name: "bill", id: 50}
72+
carl := &person{name: "carl", id: 10}
73+
dave := &person{name: "dave", id: 32}
74+
s := HashSetFrom[*person, string]([]*person{anna, carl, dave, bill})
75+
76+
fmt.Println(s)
77+
78+
s.Remove(carl)
79+
80+
fmt.Println(s)
81+
82+
// Output:
83+
// [anna bill carl dave]
84+
// [anna bill dave]
85+
}
86+
87+
func ExampleHashSet_RemoveSlice() {
88+
anna := &person{name: "anna", id: 94}
89+
bill := &person{name: "bill", id: 50}
90+
carl := &person{name: "carl", id: 10}
91+
dave := &person{name: "dave", id: 32}
92+
s := HashSetFrom[*person, string]([]*person{anna, carl, dave, bill})
93+
94+
fmt.Println(s)
95+
96+
s.RemoveSlice([]*person{anna, carl})
97+
98+
fmt.Println(s)
99+
100+
// Output:
101+
// [anna bill carl dave]
102+
// [bill dave]
103+
}
104+
105+
func ExampleHashSet_RemoveSet() {
106+
anna := &person{name: "anna", id: 94}
107+
bill := &person{name: "bill", id: 50}
108+
carl := &person{name: "carl", id: 10}
109+
dave := &person{name: "dave", id: 32}
110+
s := HashSetFrom[*person, string]([]*person{carl, dave, bill})
111+
r := HashSetFrom[*person, string]([]*person{anna, carl})
112+
113+
fmt.Println(s)
114+
115+
s.RemoveSet(r)
116+
117+
fmt.Println(s)
118+
119+
// Output:
120+
// [bill carl dave]
121+
// [bill dave]
122+
}
35123

36-
// InsertSet
124+
func ExampleHashSet_RemoveFunc() {
125+
anna := &person{name: "anna", id: 94}
126+
bill := &person{name: "bill", id: 50}
127+
carl := &person{name: "carl", id: 10}
128+
dave := &person{name: "dave", id: 32}
129+
s := HashSetFrom[*person, string]([]*person{anna, bill, carl, dave})
37130

38-
// Remove
131+
idAbove50 := func(p *person) bool {
132+
return p.id >= 50
133+
}
39134

40-
// RemoveSlice
135+
fmt.Println(s)
41136

42-
// RemoveSet
137+
s.RemoveFunc(idAbove50)
43138

44-
// RemoveFunc
139+
fmt.Println(s)
140+
141+
// Output:
142+
// [anna bill carl dave]
143+
// [carl dave]
144+
}
45145

46146
func ExampleHashSet_Contains() {
47147
anna := &person{name: "anna", id: 94}
@@ -58,26 +158,189 @@ func ExampleHashSet_Contains() {
58158
// false
59159
}
60160

61-
// ContainsAll
161+
func ExampleHashSet_ContainsAll() {
162+
anna := &person{name: "anna", id: 94}
163+
bill := &person{name: "bill", id: 50}
164+
carl := &person{name: "carl", id: 10}
165+
dave := &person{name: "dave", id: 32}
166+
s := HashSetFrom[*person, string]([]*person{anna, bill, carl})
167+
168+
fmt.Println(s.ContainsAll([]*person{anna, bill}))
169+
fmt.Println(s.ContainsAll([]*person{anna, dave}))
170+
171+
// Output:
172+
// true
173+
// false
174+
}
175+
176+
func ExampleHashSet_ContainsSlice() {
177+
anna := &person{name: "anna", id: 94}
178+
bill := &person{name: "bill", id: 50}
179+
carl := &person{name: "carl", id: 10}
180+
dave := &person{name: "dave", id: 32}
181+
s := HashSetFrom[*person, string]([]*person{anna, bill, carl})
182+
183+
fmt.Println(s.ContainsSlice([]*person{anna, bill}))
184+
fmt.Println(s.ContainsSlice([]*person{anna, bill, carl}))
185+
fmt.Println(s.ContainsSlice([]*person{carl, dave}))
186+
187+
// Output:
188+
// false
189+
// true
190+
// false
191+
}
192+
193+
func ExampleHashSet_Subset() {
194+
anna := &person{name: "anna", id: 94}
195+
bill := &person{name: "bill", id: 50}
196+
carl := &person{name: "carl", id: 10}
197+
dave := &person{name: "dave", id: 32}
198+
s1 := HashSetFrom[*person, string]([]*person{anna, bill, carl})
199+
s2 := HashSetFrom[*person, string]([]*person{anna, bill})
200+
s3 := HashSetFrom[*person, string]([]*person{bill, carl, dave})
201+
202+
fmt.Println(s1.Subset(s2))
203+
fmt.Println(s1.Subset(s3))
204+
205+
// Output:
206+
// true
207+
// false
208+
}
209+
210+
func ExampleHashSet_Size() {
211+
anna := &person{name: "anna", id: 94}
212+
bill := &person{name: "bill", id: 50}
213+
carl := &person{name: "carl", id: 10}
214+
s := HashSetFrom[*person, string]([]*person{anna, bill, carl})
215+
216+
fmt.Println(s.Size())
217+
218+
// Output:
219+
// 3
220+
}
221+
222+
func ExampleHashSet_Empty() {
223+
s := NewHashSet[*person, string](0)
224+
225+
fmt.Println(s.Empty())
226+
227+
// Output:
228+
// true
229+
}
230+
231+
func ExampleHashSet_Union() {
232+
anna := &person{name: "anna", id: 94}
233+
bill := &person{name: "bill", id: 50}
234+
carl := &person{name: "carl", id: 10}
235+
dave := &person{name: "dave", id: 32}
236+
s1 := HashSetFrom[*person, string]([]*person{anna, bill, carl})
237+
s2 := HashSetFrom[*person, string]([]*person{anna, bill, dave})
238+
union := s1.Union(s2)
239+
240+
fmt.Println(s1)
241+
fmt.Println(s2)
242+
fmt.Println(union)
243+
244+
// Output:
245+
// [anna bill carl]
246+
// [anna bill dave]
247+
// [anna bill carl dave]
248+
}
249+
250+
func ExampleHashSet_Difference() {
251+
anna := &person{name: "anna", id: 94}
252+
bill := &person{name: "bill", id: 50}
253+
carl := &person{name: "carl", id: 10}
254+
dave := &person{name: "dave", id: 32}
255+
s1 := HashSetFrom[*person, string]([]*person{anna, bill, carl})
256+
s2 := HashSetFrom[*person, string]([]*person{anna, bill, dave})
257+
difference := s1.Difference(s2)
258+
259+
fmt.Println(s1)
260+
fmt.Println(s2)
261+
fmt.Println(difference)
262+
263+
// Output:
264+
// [anna bill carl]
265+
// [anna bill dave]
266+
// [carl]
267+
}
268+
269+
func ExampleHashSet_Intersect() {
270+
anna := &person{name: "anna", id: 94}
271+
bill := &person{name: "bill", id: 50}
272+
carl := &person{name: "carl", id: 10}
273+
dave := &person{name: "dave", id: 32}
274+
s1 := HashSetFrom[*person, string]([]*person{anna, bill, carl})
275+
s2 := HashSetFrom[*person, string]([]*person{anna, bill, dave})
276+
intersect := s1.Intersect(s2)
62277

63-
// ContainsSlice
278+
fmt.Println(s1)
279+
fmt.Println(s2)
280+
fmt.Println(intersect)
64281

65-
// Subset
282+
// Output:
283+
// [anna bill carl]
284+
// [anna bill dave]
285+
// [anna bill]
286+
}
66287

67-
// Size
288+
func ExampleHashSet_Equal() {
289+
anna := &person{name: "anna", id: 94}
290+
bill := &person{name: "bill", id: 50}
291+
carl := &person{name: "carl", id: 10}
292+
dave := &person{name: "dave", id: 32}
68293

69-
// Empty
294+
s1 := HashSetFrom[*person, string]([]*person{anna, bill, carl})
295+
s2 := HashSetFrom[*person, string]([]*person{anna, bill, carl})
296+
s3 := HashSetFrom[*person, string]([]*person{anna, bill, dave})
70297

71-
// Union
298+
fmt.Println(s1.Equal(s2))
299+
fmt.Println(s1.Equal(s3))
72300

73-
// Difference
301+
// Output:
302+
// true
303+
// false
304+
}
74305

75-
// Intersect
306+
func ExampleHashSet_Copy() {
307+
anna := &person{name: "anna", id: 94}
308+
bill := &person{name: "bill", id: 50}
309+
carl := &person{name: "carl", id: 10}
310+
s := HashSetFrom[*person, string]([]*person{anna, bill, carl})
311+
c := s.Copy()
76312

77-
// Equal
313+
fmt.Println(c)
78314

79-
// Copy
315+
// Output:
316+
// [anna bill carl]
317+
}
80318

81-
// Slice
319+
func ExampleHashSet_Slice() {
320+
anna := &person{name: "anna", id: 94}
321+
bill := &person{name: "bill", id: 50}
322+
carl := &person{name: "carl", id: 10}
323+
s := HashSetFrom[*person, string]([]*person{anna, bill, carl})
324+
325+
slice := s.Slice()
326+
sort.Slice(slice, func(a, b int) bool {
327+
return slice[a].id < slice[b].id
328+
})
82329

83-
// String
330+
fmt.Println(slice)
331+
332+
// Output:
333+
// [carl bill anna]
334+
}
335+
336+
func ExampleHashSet_String() {
337+
anna := &person{name: "anna", id: 94}
338+
bill := &person{name: "bill", id: 50}
339+
carl := &person{name: "carl", id: 10}
340+
s := HashSetFrom[*person, string]([]*person{anna, bill, carl})
341+
342+
fmt.Println(s.String())
343+
344+
// Output:
345+
// [anna bill carl]
346+
}

0 commit comments

Comments
 (0)