func cmpValueResults(expected, found Value) string {
	if expected.IsNull() != found.IsNull() {
		return fmt.Sprintf("expected is null %v and found is null %v", expected.IsNull(), found.IsNull())
	}

	if expected.Type() != found.Type() {
		return fmt.Sprintf("expected type is %s and found type is %s", expected.Type(), found.Type())
	}

	if diff := cmpAnnotations(expected.Annotations(), found.Annotations()); diff != "" {
		return diff
	}

	switch expected.(type) {
	case Blob:
		return cmp.Diff(string(expected.(Blob).Value()), string(found.(Blob).Value()))
	case Bool:
		return cmp.Diff(expected.(Bool).Value(), found.(Bool).Value())
	case Clob:
		return cmp.Diff(expected.(Clob).Value(), found.(Clob).Value())
	case Decimal:
		return cmpDecimals(expected.(Decimal), found.(Decimal))
	case Float:
		return cmp.Diff(expected.(Float).Value(), found.(Float).Value())
	case Int:
		return cmpInts(expected.(Int), found.(Int))
	case List:
		return cmpValueSlices(expected.(List).values, found.(List).values)
	case SExp:
		return cmpValueSlices(expected.(SExp).values, found.(SExp).values)
	case String:
		return cmp.Diff(expected.(String).Value(), found.(String).Value())
	case Struct:
		return cmpStructFields(expected.(Struct).fields, found.(Struct).fields)
	case Symbol:
		return cmp.Diff(expected.(Symbol).Value(), found.(Symbol).Value())
	case Timestamp:
		return cmpTimestamps(expected.(Timestamp), found.(Timestamp))
	}

	return ""
}
// cmpValueResults compares the results of calling Value() on the two given Values.
// If there is a difference, then that difference is returned.  Otherwise the empty
// string is returned.
cmpValueResults compares the results of calling Value() on the two given Values.
If there is a difference, then that difference is returned.  Otherwise the empty
string is returned.
// cmpValueResults compares the results of calling Value () on the two given Values . // If there is a difference then that difference is returned . Otherwise the empty // string is returned .
func cmpValueResults(expected, found Value) string {
	if expected.IsNull() != found.IsNull() {
		return fmt.Sprintf("expected is null %v and found is null %v", expected.IsNull(), found.IsNull())
	}
	if expected.Type() != found.Type() {
		return fmt.Sprintf("expected type is %s and found type is %s", expected.Type(), found.Type())
	}
	if diff := cmpAnnotations(expected.Annotations(), found.Annotations()); diff != "" {
		return diff
	}
	switch expected.(type) {
	case Blob:
		return cmp.Diff(string(expected.(Blob).Value()), string(found.(Blob).Value()))
	case Bool:
		return cmp.Diff(expected.(Bool).Value(), found.(Bool).Value())
	case Clob:
		return cmp.Diff(expected.(Clob).Value(), found.(Clob).Value())
	case Decimal:
		return cmpDecimals(expected.(Decimal), found.(Decimal))
	case Float:
		return cmp.Diff(expected.(Float).Value(), found.(Float).Value())
	case Int:
		return cmpInts(expected.(Int), found.(Int))
	case List:
		return cmpValueSlices(expected.(List).values, found.(List).values)
	case SExp:
		return cmpValueSlices(expected.(SExp).values, found.(SExp).values)
	case String:
		return cmp.Diff(expected.(String).Value(), found.(String).Value())
	case Struct:
		return cmpStructFields(expected.(Struct).fields, found.(Struct).fields)
	case Symbol:
		return cmp.Diff(expected.(Symbol).Value(), found.(Symbol).Value())
	case Timestamp:
		return cmpTimestamps(expected.(Timestamp), found.(Timestamp))
	}
	return ""
}
func cmpValueResults ( expected , found Value ) string { if expected . IsNull ( ) != found . IsNull ( ) { return fmt . Sprintf ( " " , expected . IsNull ( ) , found . IsNull ( ) ) } if expected . Type ( ) != found . Type ( ) { return fmt . Sprintf ( " " , expected . Type ( ) , found . Type ( ) ) } if diff := cmpAnnotations ( expected . Annotations ( ) , found . Annotations ( ) ) ; diff != " " { return diff } switch expected . ( type ) { case Blob : return cmp . Diff ( string ( expected . ( Blob ) . Value ( ) ) , string ( found . ( Blob ) . Value ( ) ) ) case Bool : return cmp . Diff ( expected . ( Bool ) . Value ( ) , found . ( Bool ) . Value ( ) ) case Clob : return cmp . Diff ( expected . ( Clob ) . Value ( ) , found . ( Clob ) . Value ( ) ) case Decimal : return cmpDecimals ( expected . ( Decimal ) , found . ( Decimal ) ) case Float : return cmp . Diff ( expected . ( Float ) . Value ( ) , found . ( Float ) . Value ( ) ) case Int : return cmpInts ( expected . ( Int ) , found . ( Int ) ) case List : return cmpValueSlices ( expected . ( List ) . values , found . ( List ) . values ) case SExp : return cmpValueSlices ( expected . ( SExp ) . values , found . ( SExp ) . values ) case String : return cmp . Diff ( expected . ( String ) . Value ( ) , found . ( String ) . Value ( ) ) case Struct : return cmpStructFields ( expected . ( Struct ) . fields , found . ( Struct ) . fields ) case Symbol : return cmp . Diff ( expected . ( Symbol ) . Value ( ) , found . ( Symbol ) . Value ( ) ) case Timestamp : return cmpTimestamps ( expected . ( Timestamp ) , found . ( Timestamp ) ) } return " " }
cmpValueResults compares the results of calling Value() on the two given Values.
cmpValueResults compares the results of calling Value () on the two given Values .