3) Appending two StringBuilders, x and y, then reversing, is the same as reversing the second
StringBuilder (y) and appending the reverse of the first StringBuilder (x).
*/
public final class StringBuilderReverse {
public static void main(final String[] args) {
final Property p1 = property(arbStringBuilder, new F<StringBuilder, Property>() {
public Property f(final StringBuilder sb) {
return prop(stringBuilderEqual.eq(new StringBuilder(sb), sb.reverse().reverse()));
}
});
final Property p2 = property(arbCharacter, new F<Character, Property>() {
public Property f(final Character c) {
return prop(stringBuilderEqual.eq(new StringBuilder().append(c), new StringBuilder().append(c).reverse()));
}
});
final Property p3 = property(arbStringBuilder, arbStringBuilder, new F2<StringBuilder, StringBuilder, Property>() {
public Property f(final StringBuilder x, final StringBuilder y) {
// copy the string builders before performing updates on x and y.
final StringBuilder xx = new StringBuilder(x);
final StringBuilder yy = new StringBuilder(y);
return prop(stringBuilderEqual.eq(x.append(y).reverse(), yy.reverse().append(xx.reverse())));