// Path: src/main/java/io/datanerds/avropatch/value/AvroData.java
// public final class AvroData extends ReflectData {
// 
//     private static final List<Conversion<?>> CONVERTERS = Arrays.asList(
//             new DateConversion(),
//             new BigIntegerConversion(),
//             new BigDecimalConversion(),
//             new UUIDConversion()
//     );
// 
//     private static final AvroData INSTANCE = new AvroData();
// 
//     private AvroData() {
//         CONVERTERS.forEach(this::addLogicalTypeConversion);
//     }
// 
//     /**
//      * Hides {@link ReflectData#get()} and returns {@link ReflectData} subclass initialized with custom converters.
//      * @see ReflectData#get()
//      * @see DateConversion
//      * @see BigIntegerConversion
//      * @see BigDecimalConversion
//      * @see UUIDConversion
//      * @return singleton instance
//      */
//     public static AvroData get() {
//         return INSTANCE;
//     }
// }


import io.datanerds.avropatch.value.AvroData;
import org.apache.avro.Schema;
import org.apache.avro.io.*;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.Objects;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
package io.datanerds.avropatch.serialization;




public class SerializationTester<T> {

    private final DatumWriter<T> writer;
    private final DatumReader<T> reader;

    public SerializationTester(Schema schema) {
        Objects.nonNull(schema);
        writer = AvroData.get().createDatumWriter(schema);
        reader = AvroData.get().createDatumReader(schema);
    }

    public T reserialize(T value) throws IOException {
        byte[] bytes = toBytes(value);
// Path: src/main/java/io/datanerds/avropatch/value/AvroData.java
// public final class AvroData extends ReflectData {
// 
//     private static final List<Conversion<?>> CONVERTERS = Arrays.asList(
//             new DateConversion(),
//             new BigIntegerConversion(),
//             new BigDecimalConversion(),
//             new UUIDConversion()
//     );
// 
//     private static final AvroData INSTANCE = new AvroData();
// 
//     private AvroData() {
//         CONVERTERS.forEach(this::addLogicalTypeConversion);
//     }
// 
//     /**
//      * Hides {@link ReflectData#get()} and returns {@link ReflectData} subclass initialized with custom converters.
//      * @see ReflectData#get()
//      * @see DateConversion
//      * @see BigIntegerConversion
//      * @see BigDecimalConversion
//      * @see UUIDConversion
//      * @return singleton instance
//      */
//     public static AvroData get() {
//         return INSTANCE;
//     }
// }


// Path: src/test/java/io/datanerds/avropatch/serialization/SerializationTester.java
import io.datanerds.avropatch.value.AvroData;
import org.apache.avro.Schema;
import org.apache.avro.io.*;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.Objects;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;

package io.datanerds.avropatch.serialization;




public class SerializationTester<T> {

    private final DatumWriter<T> writer;
    private final DatumReader<T> reader;

    public SerializationTester(Schema schema) {
        Objects.nonNull(schema);
        writer = AvroData.get().createDatumWriter(schema);
        reader = AvroData.get().createDatumReader(schema);
    }

    public T reserialize(T value) throws IOException {
        byte[] bytes = toBytes(value);
        return toObject(bytes);