bump gotest.tools v2.3.0, google/go-cmp v0.2.0
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
		
							
								
								
									
										42
									
								
								vendor/github.com/google/go-cmp/cmp/compare.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								vendor/github.com/google/go-cmp/cmp/compare.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -22,7 +22,7 @@
 | 
			
		||||
// equality is determined by recursively comparing the primitive kinds on both
 | 
			
		||||
// values, much like reflect.DeepEqual. Unlike reflect.DeepEqual, unexported
 | 
			
		||||
// fields are not compared by default; they result in panics unless suppressed
 | 
			
		||||
// by using an Ignore option (see cmpopts.IgnoreUnexported) or explictly compared
 | 
			
		||||
// by using an Ignore option (see cmpopts.IgnoreUnexported) or explicitly compared
 | 
			
		||||
// using the AllowUnexported option.
 | 
			
		||||
package cmp
 | 
			
		||||
 | 
			
		||||
@@ -35,7 +35,7 @@ import (
 | 
			
		||||
	"github.com/google/go-cmp/cmp/internal/value"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
// BUG: Maps with keys containing NaN values cannot be properly compared due to
 | 
			
		||||
// BUG(dsnet): Maps with keys containing NaN values cannot be properly compared due to
 | 
			
		||||
// the reflection package's inability to retrieve such entries. Equal will panic
 | 
			
		||||
// anytime it comes across a NaN key, but this behavior may change.
 | 
			
		||||
//
 | 
			
		||||
@@ -61,8 +61,8 @@ var nothing = reflect.Value{}
 | 
			
		||||
//
 | 
			
		||||
// • If the values have an Equal method of the form "(T) Equal(T) bool" or
 | 
			
		||||
// "(T) Equal(I) bool" where T is assignable to I, then use the result of
 | 
			
		||||
// x.Equal(y). Otherwise, no such method exists and evaluation proceeds to
 | 
			
		||||
// the next rule.
 | 
			
		||||
// x.Equal(y) even if x or y is nil.
 | 
			
		||||
// Otherwise, no such method exists and evaluation proceeds to the next rule.
 | 
			
		||||
//
 | 
			
		||||
// • Lastly, try to compare x and y based on their basic kinds.
 | 
			
		||||
// Simple kinds like booleans, integers, floats, complex numbers, strings, and
 | 
			
		||||
@@ -304,7 +304,8 @@ func (s *state) tryOptions(vx, vy reflect.Value, t reflect.Type) bool {
 | 
			
		||||
 | 
			
		||||
	// Evaluate all filters and apply the remaining options.
 | 
			
		||||
	if opt := opts.filter(s, vx, vy, t); opt != nil {
 | 
			
		||||
		return opt.apply(s, vx, vy)
 | 
			
		||||
		opt.apply(s, vx, vy)
 | 
			
		||||
		return true
 | 
			
		||||
	}
 | 
			
		||||
	return false
 | 
			
		||||
}
 | 
			
		||||
@@ -322,6 +323,7 @@ func (s *state) tryMethod(vx, vy reflect.Value, t reflect.Type) bool {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *state) callTRFunc(f, v reflect.Value) reflect.Value {
 | 
			
		||||
	v = sanitizeValue(v, f.Type().In(0))
 | 
			
		||||
	if !s.dynChecker.Next() {
 | 
			
		||||
		return f.Call([]reflect.Value{v})[0]
 | 
			
		||||
	}
 | 
			
		||||
@@ -345,6 +347,8 @@ func (s *state) callTRFunc(f, v reflect.Value) reflect.Value {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *state) callTTBFunc(f, x, y reflect.Value) bool {
 | 
			
		||||
	x = sanitizeValue(x, f.Type().In(0))
 | 
			
		||||
	y = sanitizeValue(y, f.Type().In(1))
 | 
			
		||||
	if !s.dynChecker.Next() {
 | 
			
		||||
		return f.Call([]reflect.Value{x, y})[0].Bool()
 | 
			
		||||
	}
 | 
			
		||||
@@ -372,20 +376,40 @@ func detectRaces(c chan<- reflect.Value, f reflect.Value, vs ...reflect.Value) {
 | 
			
		||||
	ret = f.Call(vs)[0]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// sanitizeValue converts nil interfaces of type T to those of type R,
 | 
			
		||||
// assuming that T is assignable to R.
 | 
			
		||||
// Otherwise, it returns the input value as is.
 | 
			
		||||
func sanitizeValue(v reflect.Value, t reflect.Type) reflect.Value {
 | 
			
		||||
	// TODO(dsnet): Remove this hacky workaround.
 | 
			
		||||
	// See https://golang.org/issue/22143
 | 
			
		||||
	if v.Kind() == reflect.Interface && v.IsNil() && v.Type() != t {
 | 
			
		||||
		return reflect.New(t).Elem()
 | 
			
		||||
	}
 | 
			
		||||
	return v
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (s *state) compareArray(vx, vy reflect.Value, t reflect.Type) {
 | 
			
		||||
	step := &sliceIndex{pathStep{t.Elem()}, 0, 0}
 | 
			
		||||
	s.curPath.push(step)
 | 
			
		||||
 | 
			
		||||
	// Compute an edit-script for slices vx and vy.
 | 
			
		||||
	eq, es := diff.Difference(vx.Len(), vy.Len(), func(ix, iy int) diff.Result {
 | 
			
		||||
	es := diff.Difference(vx.Len(), vy.Len(), func(ix, iy int) diff.Result {
 | 
			
		||||
		step.xkey, step.ykey = ix, iy
 | 
			
		||||
		return s.statelessCompare(vx.Index(ix), vy.Index(iy))
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	// Equal or no edit-script, so report entire slices as is.
 | 
			
		||||
	if eq || es == nil {
 | 
			
		||||
	// Report the entire slice as is if the arrays are of primitive kind,
 | 
			
		||||
	// and the arrays are different enough.
 | 
			
		||||
	isPrimitive := false
 | 
			
		||||
	switch t.Elem().Kind() {
 | 
			
		||||
	case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
 | 
			
		||||
		reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr,
 | 
			
		||||
		reflect.Bool, reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128:
 | 
			
		||||
		isPrimitive = true
 | 
			
		||||
	}
 | 
			
		||||
	if isPrimitive && es.Dist() > (vx.Len()+vy.Len())/4 {
 | 
			
		||||
		s.curPath.pop() // Pop first since we are reporting the whole slice
 | 
			
		||||
		s.report(eq, vx, vy)
 | 
			
		||||
		s.report(false, vx, vy)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user