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
}