From b340dd202eda2c9fc964b0dc91ec67bfd52c6b42 Mon Sep 17 00:00:00 2001 From: Hector Sanjuan Date: Thu, 2 Aug 2018 11:51:05 +0200 Subject: [PATCH] Add tests for Set type License: MIT Signed-off-by: Hector Sanjuan --- set_test.go | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 set_test.go diff --git a/set_test.go b/set_test.go new file mode 100644 index 0000000..38d7317 --- /dev/null +++ b/set_test.go @@ -0,0 +1,92 @@ +package cid + +import ( + "crypto/rand" + "errors" + "testing" + + mh "github.com/multiformats/go-multihash" +) + +func makeRandomCid(t *testing.T) *Cid { + p := make([]byte, 256) + _, err := rand.Read(p) + if err != nil { + t.Fatal(err) + } + + h, err := mh.Sum(p, mh.SHA3, 4) + if err != nil { + t.Fatal(err) + } + + cid := &Cid{ + codec: 7, + version: 1, + hash: h, + } + + return cid +} + +func TestSet(t *testing.T) { + cid := makeRandomCid(t) + cid2 := makeRandomCid(t) + s := NewSet() + + s.Add(cid) + + if !s.Has(cid) { + t.Error("should have the CID") + } + + if s.Len() != 1 { + t.Error("should report 1 element") + } + + keys := s.Keys() + + if len(keys) != 1 || !keys[0].Equals(cid) { + t.Error("key should correspond to Cid") + } + + if s.Visit(cid) { + t.Error("visit should return false") + } + + foreach := []*Cid{} + foreachF := func(c *Cid) error { + foreach = append(foreach, c) + return nil + } + + if err := s.ForEach(foreachF); err != nil { + t.Error(err) + } + + if len(foreach) != 1 { + t.Error("ForEach should have visited 1 element") + } + + foreachErr := func(c *Cid) error { + return errors.New("test") + } + + if err := s.ForEach(foreachErr); err == nil { + t.Error("Should have returned an error") + } + + if !s.Visit(cid2) { + t.Error("should have visited a new Cid") + } + + if s.Len() != 2 { + t.Error("len should be 2 now") + } + + s.Remove(cid2) + + if s.Len() != 1 { + t.Error("len should be 1 now") + } +}