// Path: src/test/java/org/killbill/billing/test/helpers/TestUtil.java
// public static String shortIdentityToString(Object obj) {
//     if (obj == null) {
//         return null;
//     }
//     return obj.getClass().getSimpleName() + '@' + toHexString(identityHashCode(obj));
// }
// 
// Path: src/test/java/org/killbill/billing/test/helpers/TaxCodeBuilder.java
// @SuppressWarnings("javadoc")
// public class TaxCodeBuilder implements Builder<TaxCode> {
// 
//     private String name;
//     private String taxItemDescription;
//     private BigDecimal rate;
//     private LocalDate startingOn;
//     private LocalDate stoppingOn;
//     private Country country;
// 
//     @Override
//     public TaxCode build() {
//         return new TaxCode(name, taxItemDescription, rate, startingOn, stoppingOn, country);
//     }
// 
//     public TaxCodeBuilder withName(String name) {
//         this.name = name;
//         return this;
//     }
// 
//     public TaxCodeBuilder withTaxItemDescription(String taxItemDescription) {
//         this.taxItemDescription = taxItemDescription;
//         return this;
//     }
// 
//     public TaxCodeBuilder withRate(BigDecimal rate) {
//         this.rate = rate;
//         return this;
//     }
// 
//     public TaxCodeBuilder withStartingOn(LocalDate startingOn) {
//         this.startingOn = startingOn;
//         return this;
//     }
// 
//     public TaxCodeBuilder withStoppingOn(LocalDate stoppingOn) {
//         this.stoppingOn = stoppingOn;
//         return this;
//     }
// 
//     public TaxCodeBuilder withCountry(Country country) {
//         this.country = country;
//         return this;
//     }
// 
// }
// 
// Path: src/test/java/org/killbill/billing/test/helpers/TestUtil.java
// public final class TestUtil {
//     private TestUtil() {
//     }
// 
//     /**
//      * Helper assert that ignores {@linkplain BigDecimal#scale() scales}.
//      *
//      * @param actual
//      *            the actual value
//      * @param expected
//      *            the expected value
//      */
//     public static void assertEqualsIgnoreScale(BigDecimal actual, BigDecimal expected) {
//         assertTrue(expected.compareTo(actual) == 0);
//     }
// 
//     /**
//      * An {@link org.apache.commons.lang3.ObjectUtils#identityToString(Object)
//      * identityToString()} variant with short class name.
//      *
//      * @param obj
//      *            The object to create a toString for, may be {@code null}.
//      * @return The default toString text, or {@code null} if {@code null} passed
//      *         in.
//      * @see org.apache.commons.lang3.ObjectUtils#identityToString(Object)
//      */
//     public static String shortIdentityToString(Object obj) {
//         if (obj == null) {
//             return null;
//         }
//         return obj.getClass().getSimpleName() + '@' + toHexString(identityHashCode(obj));
//     }
// }


import static java.math.BigDecimal.ZERO;
import static org.killbill.billing.test.helpers.TestUtil.shortIdentityToString;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import java.math.BigDecimal;
import org.joda.time.LocalDate;
import org.killbill.billing.test.helpers.TaxCodeBuilder;
import org.killbill.billing.test.helpers.TestUtil;
import org.testng.annotations.Test;
        assertFalse(taxA.equals(taxCdesc));
        assertFalse(taxA.equals(taxCstart));
        assertFalse(taxA.equals(taxCstop));
    }

    @Test(groups = "fast")
    public void shouldBeEqualIgnoringScale() {
        // Given
        TaxCode taxD1 = new TaxCodeBuilder().withRate(new BigDecimal("0.1")).build();
        TaxCode taxD2 = new TaxCodeBuilder().withRate(new BigDecimal("0.100")).build();
        TaxCode taxE = new TaxCodeBuilder().withRate(new BigDecimal("0.2")).build();

        // Expect
        assertTrue(taxD1.equals(taxD2));
        assertTrue(taxD2.equals(taxD1));
        assertFalse(taxD1.equals(taxE));
        assertFalse(taxD2.equals(taxE));
        assertFalse(taxE.equals(taxD1));
        assertFalse(taxE.equals(taxD2));
    }

    @Test(groups = "fast")
    public void shouldComputeHashCode() {
        // Expect
        assertEquals(taxTT.hashCode(), -1190345958);
    }

    @Test(groups = "fast")
    public void shouldPrintFields() {
        // Expect
// Path: src/test/java/org/killbill/billing/test/helpers/TestUtil.java
// public static String shortIdentityToString(Object obj) {
//     if (obj == null) {
//         return null;
//     }
//     return obj.getClass().getSimpleName() + '@' + toHexString(identityHashCode(obj));
// }
// 
// Path: src/test/java/org/killbill/billing/test/helpers/TaxCodeBuilder.java
// @SuppressWarnings("javadoc")
// public class TaxCodeBuilder implements Builder<TaxCode> {
// 
//     private String name;
//     private String taxItemDescription;
//     private BigDecimal rate;
//     private LocalDate startingOn;
//     private LocalDate stoppingOn;
//     private Country country;
// 
//     @Override
//     public TaxCode build() {
//         return new TaxCode(name, taxItemDescription, rate, startingOn, stoppingOn, country);
//     }
// 
//     public TaxCodeBuilder withName(String name) {
//         this.name = name;
//         return this;
//     }
// 
//     public TaxCodeBuilder withTaxItemDescription(String taxItemDescription) {
//         this.taxItemDescription = taxItemDescription;
//         return this;
//     }
// 
//     public TaxCodeBuilder withRate(BigDecimal rate) {
//         this.rate = rate;
//         return this;
//     }
// 
//     public TaxCodeBuilder withStartingOn(LocalDate startingOn) {
//         this.startingOn = startingOn;
//         return this;
//     }
// 
//     public TaxCodeBuilder withStoppingOn(LocalDate stoppingOn) {
//         this.stoppingOn = stoppingOn;
//         return this;
//     }
// 
//     public TaxCodeBuilder withCountry(Country country) {
//         this.country = country;
//         return this;
//     }
// 
// }
// 
// Path: src/test/java/org/killbill/billing/test/helpers/TestUtil.java
// public final class TestUtil {
//     private TestUtil() {
//     }
// 
//     /**
//      * Helper assert that ignores {@linkplain BigDecimal#scale() scales}.
//      *
//      * @param actual
//      *            the actual value
//      * @param expected
//      *            the expected value
//      */
//     public static void assertEqualsIgnoreScale(BigDecimal actual, BigDecimal expected) {
//         assertTrue(expected.compareTo(actual) == 0);
//     }
// 
//     /**
//      * An {@link org.apache.commons.lang3.ObjectUtils#identityToString(Object)
//      * identityToString()} variant with short class name.
//      *
//      * @param obj
//      *            The object to create a toString for, may be {@code null}.
//      * @return The default toString text, or {@code null} if {@code null} passed
//      *         in.
//      * @see org.apache.commons.lang3.ObjectUtils#identityToString(Object)
//      */
//     public static String shortIdentityToString(Object obj) {
//         if (obj == null) {
//             return null;
//         }
//         return obj.getClass().getSimpleName() + '@' + toHexString(identityHashCode(obj));
//     }
// }


// Path: src/test/java/org/killbill/billing/plugin/simpletax/internal/TestTaxCode.java
import static java.math.BigDecimal.ZERO;
import static org.killbill.billing.test.helpers.TestUtil.shortIdentityToString;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import java.math.BigDecimal;
import org.joda.time.LocalDate;
import org.killbill.billing.test.helpers.TaxCodeBuilder;
import org.killbill.billing.test.helpers.TestUtil;
import org.testng.annotations.Test;

        assertFalse(taxA.equals(taxCdesc));
        assertFalse(taxA.equals(taxCstart));
        assertFalse(taxA.equals(taxCstop));
    }

    @Test(groups = "fast")
    public void shouldBeEqualIgnoringScale() {
        // Given
        TaxCode taxD1 = new TaxCodeBuilder().withRate(new BigDecimal("0.1")).build();
        TaxCode taxD2 = new TaxCodeBuilder().withRate(new BigDecimal("0.100")).build();
        TaxCode taxE = new TaxCodeBuilder().withRate(new BigDecimal("0.2")).build();

        // Expect
        assertTrue(taxD1.equals(taxD2));
        assertTrue(taxD2.equals(taxD1));
        assertFalse(taxD1.equals(taxE));
        assertFalse(taxD2.equals(taxE));
        assertFalse(taxE.equals(taxD1));
        assertFalse(taxE.equals(taxD2));
    }

    @Test(groups = "fast")
    public void shouldComputeHashCode() {
        // Expect
        assertEquals(taxTT.hashCode(), -1190345958);
    }

    @Test(groups = "fast")
    public void shouldPrintFields() {
        // Expect
        String shortIdentityToString = shortIdentityToString(taxTT);