Skip to content

Commit

Permalink
Add stringset and fix bind example.
Browse files Browse the repository at this point in the history
  • Loading branch information
jaeyeom committed Jan 25, 2016
1 parent 7c514b2 commit d937fe9
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 8 deletions.
7 changes: 5 additions & 2 deletions examples/function/bind.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package function

func InsertFunc(m MultiSet) func(val string) {
import "github.com/jaeyeom/gogo/generate/stringset"

func InsertFunc(m stringset.StringSet) func(val string) {
return func(val string) {
Insert(m, val)
m.Insert(val)
}
// Or it could be simply: return m.Insert
}
22 changes: 20 additions & 2 deletions examples/function/bind_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,24 @@
package function

func ExampleInsertFunc() {
m := NewMultiSet()
import (
"bytes"
"reflect"
"testing"

"github.com/jaeyeom/gogo/generate/stringset"
)

func TestInsertFunc(t *testing.T) {
m := stringset.NewStringSet()
r := bytes.NewBufferString("a\nb\nc\nc\n")
ReadFrom(r, InsertFunc(m))
expected := stringset.StringSet(map[string]int{
"a": 1,
"b": 1,
"c": 2,
})
if !reflect.DeepEqual(expected, m) {
t.Errorf("%d", len(m))
t.Errorf("%v != %v", expected, m)
}
}
2 changes: 1 addition & 1 deletion generate/intset/intset.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// Generated by multisetgen. DO NOT EDIT!
package main
package intset

import "fmt"

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package main
package intset

import "fmt"

//go:generate multisetgen -multiset_typename=IntSet -element_typename=int
//go:generate multisetgen -multiset_typename=IntSet -element_typename=int -package_name=intset

func main() {
func Example() {
m := NewIntSet()
fmt.Println(m.String())
fmt.Println(m.Count(3))
Expand Down
38 changes: 38 additions & 0 deletions generate/stringset/stringset.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
// Generated by multisetgen. DO NOT EDIT!
package stringset

import "fmt"

type StringSet map[string]int

func NewStringSet() StringSet {
return StringSet{}
}

func (m StringSet) Insert(val string) {
m[val]++
}

func (m StringSet) Erase(val string) {
if _, exists := m[val]; !exists {
return
}
m[val]--
if m[val] <= 0 {
delete(m, val)
}
}

func (m StringSet) Count(val string) int {
return m[val]
}

func (m StringSet) String() string {
vals := ""
for val, count := range m {
for i := 0; i < count; i++ {
vals += fmt.Sprint(val) + " "
}
}
return "{ " + vals + "}"
}
27 changes: 27 additions & 0 deletions generate/stringset/stringset_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package stringset

import "fmt"

//go:generate multisetgen -multiset_typename=StringSet -element_typename=string -package_name=stringset

func Example() {
m := NewStringSet()
fmt.Println(m.String())
fmt.Println(m.Count("3"))
m.Insert("3")
m.Insert("3")
m.Insert("3")
m.Insert("3")
fmt.Println(m.String())
fmt.Println(m.Count("3"))
m.Insert("1")
m.Insert("2")
m.Insert("5")
m.Insert("7")
m.Erase("3")
m.Erase("5")
fmt.Println(m.Count("3"))
fmt.Println(m.Count("1"))
fmt.Println(m.Count("2"))
fmt.Println(m.Count("5"))
}

0 comments on commit d937fe9

Please sign in to comment.