Skip to content

Commit

Permalink
Sets bulk intialization
Browse files Browse the repository at this point in the history
  • Loading branch information
emirpasic committed Sep 21, 2018
1 parent 5557388 commit bc82528
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 12 deletions.
10 changes: 7 additions & 3 deletions sets/hashset/hashset.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,13 @@ type Set struct {

var itemExists = struct{}{}

// New instantiates a new empty set
func New() *Set {
return &Set{items: make(map[interface{}]struct{})}
// New instantiates a new empty set and adds the passed values, if any, to the set
func New(values ...interface{}) *Set {
set := &Set{items: make(map[interface{}]struct{})}
if len(values) > 0 {
set.Add(values...)
}
return set
}

// Add adds the items (one or more) to the set.
Expand Down
17 changes: 17 additions & 0 deletions sets/hashset/hashset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,23 @@ import (
"testing"
)

func TestSetNew(t *testing.T) {
set := New(2, 1)

if actualValue := set.Size(); actualValue != 2 {
t.Errorf("Got %v expected %v", actualValue, 2)
}
if actualValue := set.Contains(1); actualValue != true {
t.Errorf("Got %v expected %v", actualValue, true)
}
if actualValue := set.Contains(2); actualValue != true {
t.Errorf("Got %v expected %v", actualValue, true)
}
if actualValue := set.Contains(3); actualValue != false {
t.Errorf("Got %v expected %v", actualValue, true)
}
}

func TestSetAdd(t *testing.T) {
set := New()
set.Add()
Expand Down
10 changes: 7 additions & 3 deletions sets/linkedhashset/linkedhashset.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,16 @@ type Set struct {

var itemExists = struct{}{}

// New instantiates a new empty set
func New() *Set {
return &Set{
// New instantiates a new empty set and adds the passed values, if any, to the set
func New(values ...interface{}) *Set {
set := &Set{
items: make(map[interface{}]struct{}),
list: doublylinkedlist.New(),
}
if len(values) > 0 {
set.Add(values...)
}
return set
}

// Add adds the items (one or more) to the set.
Expand Down
14 changes: 14 additions & 0 deletions sets/linkedhashset/linkedhashset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,20 @@ import (
"testing"
)

func TestSetNew(t *testing.T) {
set := New(2, 1)
if actualValue := set.Size(); actualValue != 2 {
t.Errorf("Got %v expected %v", actualValue, 2)
}
values := set.Values()
if actualValue := values[0]; actualValue != 2 {
t.Errorf("Got %v expected %v", actualValue, 2)
}
if actualValue := values[1]; actualValue != 1 {
t.Errorf("Got %v expected %v", actualValue, 1)
}
}

func TestSetAdd(t *testing.T) {
set := New()
set.Add()
Expand Down
24 changes: 18 additions & 6 deletions sets/treeset/treeset.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,18 +29,30 @@ type Set struct {
var itemExists = struct{}{}

// NewWith instantiates a new empty set with the custom comparator.
func NewWith(comparator utils.Comparator) *Set {
return &Set{tree: rbt.NewWith(comparator)}
func NewWith(comparator utils.Comparator, values ...interface{}) *Set {
set := &Set{tree: rbt.NewWith(comparator)}
if len(values) > 0 {
set.Add(values...)
}
return set
}

// NewWithIntComparator instantiates a new empty set with the IntComparator, i.e. keys are of type int.
func NewWithIntComparator() *Set {
return &Set{tree: rbt.NewWithIntComparator()}
func NewWithIntComparator(values ...interface{}) *Set {
set := &Set{tree: rbt.NewWithIntComparator()}
if len(values) > 0 {
set.Add(values...)
}
return set
}

// NewWithStringComparator instantiates a new empty set with the StringComparator, i.e. keys are of type string.
func NewWithStringComparator() *Set {
return &Set{tree: rbt.NewWithStringComparator()}
func NewWithStringComparator(values ...interface{}) *Set {
set := &Set{tree: rbt.NewWithStringComparator()}
if len(values) > 0 {
set.Add(values...)
}
return set
}

// Add adds the items (one or more) to the set.
Expand Down
14 changes: 14 additions & 0 deletions sets/treeset/treeset_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,20 @@ import (
"testing"
)

func TestSetNew(t *testing.T) {
set := NewWithIntComparator(2, 1)
if actualValue := set.Size(); actualValue != 2 {
t.Errorf("Got %v expected %v", actualValue, 2)
}
values := set.Values()
if actualValue := values[0]; actualValue != 1 {
t.Errorf("Got %v expected %v", actualValue, 1)
}
if actualValue := values[1]; actualValue != 2 {
t.Errorf("Got %v expected %v", actualValue, 2)
}
}

func TestSetAdd(t *testing.T) {
set := NewWithIntComparator()
set.Add()
Expand Down

0 comments on commit bc82528

Please sign in to comment.