Merge pull request #90 from emirpasic/development

Sets bulk initialization
This commit is contained in:
Emir Pasic 2018-09-21 02:28:49 +02:00 committed by GitHub
commit 66ea3cf49c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 77 additions and 12 deletions

View File

@ -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.

View File

@ -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()

View File

@ -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.

View File

@ -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()

View File

@ -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.

View File

@ -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()