File: cmpopt.go

package info (click to toggle)
elvish 0.21.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,372 kB
  • sloc: javascript: 236; sh: 130; python: 104; makefile: 88; xml: 9
file content (40 lines) | stat: -rw-r--r-- 965 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package tt

import (
	"math/big"

	"github.com/google/go-cmp/cmp"
	"github.com/google/go-cmp/cmp/cmpopts"
	"src.elv.sh/pkg/persistent/hashmap"
	"src.elv.sh/pkg/persistent/vector"
)

// CommonCmpOpt is cmp.Option shared between tt and evaltest.
var CommonCmpOpt = cmp.Options([]cmp.Option{
	cmp.Transformer("transformList", transformList),
	cmp.Transformer("transformMap", transformMap),
	cmp.Comparer(func(x, y *big.Int) bool { return x.Cmp(y) == 0 }),
	cmp.Comparer(func(x, y *big.Rat) bool { return x.Cmp(y) == 0 }),
})

var cmpopt = cmp.Options([]cmp.Option{
	cmpopts.EquateErrors(),
	CommonCmpOpt,
})

func transformList(l vector.Vector) []any {
	res := make([]any, 0, l.Len())
	for it := l.Iterator(); it.HasElem(); it.Next() {
		res = append(res, it.Elem())
	}
	return res
}

func transformMap(m hashmap.Map) map[any]any {
	res := make(map[any]any, m.Len())
	for it := m.Iterator(); it.HasElem(); it.Next() {
		k, v := it.Elem()
		res[k] = v
	}
	return res
}