github.com/ipld/go-ipld-prime@v0.21.0/testutil/garbage/garbage_test.go (about) 1 package garbage 2 3 import ( 4 "bytes" 5 "math/rand" 6 "testing" 7 "time" 8 9 qt "github.com/frankban/quicktest" 10 "github.com/ipld/go-ipld-prime" 11 "github.com/ipld/go-ipld-prime/codec/dagcbor" 12 "github.com/ipld/go-ipld-prime/datamodel" 13 "github.com/ipld/go-ipld-prime/node/basicnode" 14 ) 15 16 func TestGarbageProducesAllKinds(t *testing.T) { 17 kindCount := make(map[datamodel.Kind]int) 18 seed := time.Now().Unix() 19 t.Logf("randomness seed: %v\n", seed) 20 rnd := rand.New(rand.NewSource(seed)) 21 for i := 0; i < 10000; i++ { 22 gbg := Generate(rnd) 23 kindCount[gbg.Kind()]++ 24 } 25 for _, kind := range append(datamodel.KindSet_Scalar, datamodel.KindSet_Recursive...) { 26 qt.Assert(t, kindCount[kind], qt.Not(qt.Equals), 0) 27 } 28 } 29 30 func TestGarbageProducesValidNodes(t *testing.T) { 31 // round-trip through a codec should pick up most possible problems with Node validity 32 seed := time.Now().Unix() 33 t.Logf("randomness seed: %v\n", seed) 34 rnd := rand.New(rand.NewSource(seed)) 35 for i := 0; i < 1000; i++ { 36 var buf bytes.Buffer 37 gbg := Generate(rnd) 38 err := dagcbor.Encode(gbg, &buf) 39 qt.Assert(t, err, qt.IsNil) 40 nb := basicnode.Prototype.Any.NewBuilder() 41 err = dagcbor.Decode(nb, &buf) 42 qt.Assert(t, err, qt.IsNil) 43 ipld.DeepEqual(gbg, nb.Build()) 44 } 45 } 46 47 func TestGarbageProducesSameDataForSameRandomSource(t *testing.T) { 48 gbg1 := Generate(rand.New(rand.NewSource(1))) 49 gbg2 := Generate(rand.New(rand.NewSource(1))) 50 qt.Assert(t, ipld.DeepEqual(gbg1, gbg2), qt.IsTrue) 51 } 52 53 func TestGarbageProducesSingleKind(t *testing.T) { 54 seed := time.Now().Unix() 55 t.Logf("randomness seed: %v\n", seed) 56 rnd := rand.New(rand.NewSource(seed)) 57 for _, kind := range append(datamodel.KindSet_Scalar, datamodel.KindSet_Recursive...) { 58 t.Run(kind.String(), func(t *testing.T) { 59 kindCount := make(map[datamodel.Kind]int) 60 for i := 0; i < 1000; i++ { 61 gbg := Generate(rnd, InitialWeights(map[datamodel.Kind]int{kind: 1})) 62 kindCount[gbg.Kind()]++ 63 } 64 for _, k := range append(datamodel.KindSet_Scalar, datamodel.KindSet_Recursive...) { 65 if k == kind { 66 qt.Assert(t, kindCount[k], qt.Equals, 1000) 67 } else { 68 qt.Assert(t, kindCount[k], qt.Equals, 0) 69 } 70 } 71 }) 72 } 73 }