cmpopt.go 1013 B

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