src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/tt/cmpopt.go (about)

     1  package tt
     2  
     3  import (
     4  	"math/big"
     5  
     6  	"github.com/google/go-cmp/cmp"
     7  	"github.com/google/go-cmp/cmp/cmpopts"
     8  	"src.elv.sh/pkg/persistent/hashmap"
     9  	"src.elv.sh/pkg/persistent/vector"
    10  )
    11  
    12  // CommonCmpOpt is cmp.Option shared between tt and evaltest.
    13  var CommonCmpOpt = cmp.Options([]cmp.Option{
    14  	cmp.Transformer("transformList", transformList),
    15  	cmp.Transformer("transformMap", transformMap),
    16  	cmp.Comparer(func(x, y *big.Int) bool { return x.Cmp(y) == 0 }),
    17  	cmp.Comparer(func(x, y *big.Rat) bool { return x.Cmp(y) == 0 }),
    18  })
    19  
    20  var cmpopt = cmp.Options([]cmp.Option{
    21  	cmpopts.EquateErrors(),
    22  	CommonCmpOpt,
    23  })
    24  
    25  func transformList(l vector.Vector) []any {
    26  	res := make([]any, 0, l.Len())
    27  	for it := l.Iterator(); it.HasElem(); it.Next() {
    28  		res = append(res, it.Elem())
    29  	}
    30  	return res
    31  }
    32  
    33  func transformMap(m hashmap.Map) map[any]any {
    34  	res := make(map[any]any, m.Len())
    35  	for it := m.Iterator(); it.HasElem(); it.Next() {
    36  		k, v := it.Elem()
    37  		res[k] = v
    38  	}
    39  	return res
    40  }