diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-06-18 19:45:37 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-06-18 19:45:37 +0200 |
| commit | e79c9d2b4369454ed5a020b3e2dc6ae536afd815 (patch) | |
| tree | efff0cc9e959f0f10f89b85889d27bf9795c4bfd /vendor/github.com/google/go-cmp/cmp/internal/function | |
| parent | 27c5f59f504f562333e3cd5e715fea5cb69c396e (diff) | |
vendor: add github.com/google/go-cmp/cmp
This package simplifies diffing complex objects in tests.
Diffstat (limited to 'vendor/github.com/google/go-cmp/cmp/internal/function')
| -rw-r--r-- | vendor/github.com/google/go-cmp/cmp/internal/function/func.go | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/vendor/github.com/google/go-cmp/cmp/internal/function/func.go b/vendor/github.com/google/go-cmp/cmp/internal/function/func.go new file mode 100644 index 000000000..4c35ff11e --- /dev/null +++ b/vendor/github.com/google/go-cmp/cmp/internal/function/func.go @@ -0,0 +1,49 @@ +// Copyright 2017, The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE.md file. + +// Package function identifies function types. +package function + +import "reflect" + +type funcType int + +const ( + _ funcType = iota + + ttbFunc // func(T, T) bool + tibFunc // func(T, I) bool + trFunc // func(T) R + + Equal = ttbFunc // func(T, T) bool + EqualAssignable = tibFunc // func(T, I) bool; encapsulates func(T, T) bool + Transformer = trFunc // func(T) R + ValueFilter = ttbFunc // func(T, T) bool + Less = ttbFunc // func(T, T) bool +) + +var boolType = reflect.TypeOf(true) + +// IsType reports whether the reflect.Type is of the specified function type. +func IsType(t reflect.Type, ft funcType) bool { + if t == nil || t.Kind() != reflect.Func || t.IsVariadic() { + return false + } + ni, no := t.NumIn(), t.NumOut() + switch ft { + case ttbFunc: // func(T, T) bool + if ni == 2 && no == 1 && t.In(0) == t.In(1) && t.Out(0) == boolType { + return true + } + case tibFunc: // func(T, I) bool + if ni == 2 && no == 1 && t.In(0).AssignableTo(t.In(1)) && t.Out(0) == boolType { + return true + } + case trFunc: // func(T) R + if ni == 1 && no == 1 { + return true + } + } + return false +} |
