func()

in interfaces/interfaces.go [231:277]


func (obj *Result) Cmp(result *Result) error {
	if (obj == nil) && (result == nil) {
		return nil // same
	}

	if (obj == nil) != (result == nil) { // xor
		return fmt.Errorf("the results differ")
	}

	if len(obj.Licenses) != len(result.Licenses) {
		return fmt.Errorf("length of licenses differ")
	}
	for i, x := range obj.Licenses {
		if err := x.Cmp(result.Licenses[i]); err != nil {
			return err
		}
	}

	if obj.Confidence != result.Confidence { // TODO: epsilon?
		return fmt.Errorf("confidence values don't match: %.4f != %.4f", obj.Confidence, result.Confidence)
	}

	// We don't have a substantial reason to need to compare these right now.
	//if (obj.Meta == nil) != (result.Meta == nil) { // xor
	//	return fmt.Errorf("the meta fields differ")
	//}
	//if obj.Meta != nil && result.Meta != nil {
	//	if err := obj.Meta.Cmp(result.Meta); err != nil {
	//		return errwrap.Wrapf(err, "the meta fields differ")
	//	}
	//}

	// XXX: why does this compare fail when checking the same repo?
	// XXX: I think the google licenseclassifier backend isn't deterministic
	//if len(obj.More) != len(result.More) {
	//	return fmt.Errorf("length of more results differs")
	//}
	//for i, x := range obj.More {
	//	if err := x.Cmp(result.More[i]); err != nil {
	//		fmt.Printf("a: %+v\n", x)
	//		fmt.Printf("b: %+v\n", result.More[i])
	//		return err
	//	}
	//}

	return nil
}