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 }