Sets bulk intialization

pull/90/head
emirpasic 7 years ago
parent 555738833b
commit bc82528e1e

@ -26,9 +26,13 @@ type Set struct {
var itemExists = struct{}{} var itemExists = struct{}{}
// New instantiates a new empty set // New instantiates a new empty set and adds the passed values, if any, to the set
func New() *Set { func New(values ...interface{}) *Set {
return &Set{items: make(map[interface{}]struct{})} 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. // Add adds the items (one or more) to the set.

@ -8,6 +8,23 @@ import (
"testing" "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) { func TestSetAdd(t *testing.T) {
set := New() set := New()
set.Add() set.Add()

@ -30,12 +30,16 @@ type Set struct {
var itemExists = struct{}{} var itemExists = struct{}{}
// New instantiates a new empty set // New instantiates a new empty set and adds the passed values, if any, to the set
func New() *Set { func New(values ...interface{}) *Set {
return &Set{ set := &Set{
items: make(map[interface{}]struct{}), items: make(map[interface{}]struct{}),
list: doublylinkedlist.New(), list: doublylinkedlist.New(),
} }
if len(values) > 0 {
set.Add(values...)
}
return set
} }
// Add adds the items (one or more) to the set. // Add adds the items (one or more) to the set.

@ -9,6 +9,20 @@ import (
"testing" "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) { func TestSetAdd(t *testing.T) {
set := New() set := New()
set.Add() set.Add()

@ -29,18 +29,30 @@ type Set struct {
var itemExists = struct{}{} var itemExists = struct{}{}
// NewWith instantiates a new empty set with the custom comparator. // NewWith instantiates a new empty set with the custom comparator.
func NewWith(comparator utils.Comparator) *Set { func NewWith(comparator utils.Comparator, values ...interface{}) *Set {
return &Set{tree: rbt.NewWith(comparator)} 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. // NewWithIntComparator instantiates a new empty set with the IntComparator, i.e. keys are of type int.
func NewWithIntComparator() *Set { func NewWithIntComparator(values ...interface{}) *Set {
return &Set{tree: rbt.NewWithIntComparator()} 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. // NewWithStringComparator instantiates a new empty set with the StringComparator, i.e. keys are of type string.
func NewWithStringComparator() *Set { func NewWithStringComparator(values ...interface{}) *Set {
return &Set{tree: rbt.NewWithStringComparator()} set := &Set{tree: rbt.NewWithStringComparator()}
if len(values) > 0 {
set.Add(values...)
}
return set
} }
// Add adds the items (one or more) to the set. // Add adds the items (one or more) to the set.

@ -9,6 +9,20 @@ import (
"testing" "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) { func TestSetAdd(t *testing.T) {
set := NewWithIntComparator() set := NewWithIntComparator()
set.Add() set.Add()

Loading…
Cancel
Save