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  }