// Path: src/main/java/io/datanerds/avropatch/value/type/BigDecimalType.java
// public interface BigDecimalType {
//     String NAME = "big-decimal";
//     String DOC = "BigDecimal value represented via its scale and unscaled value.";
//     LogicalType LOGICAL_TYPE = new LogicalType(NAME);
//     Schema RECORD = SchemaBuilder
//             .record("decimal")
//             .doc(DOC)
//             .fields()
//             .name("unscaledValue").type(BigIntegerType.SCHEMA).noDefault()
//             .name("scale").type(Schema.create(Schema.Type.INT)).noDefault()
//             .endRecord();
// 
//     Schema SCHEMA = LOGICAL_TYPE.addToSchema(RECORD);
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/type/BigIntegerType.java
// public interface BigIntegerType {
//     String NAME = "big-integer";
//     LogicalType LOGICAL_TYPE = new LogicalType(NAME);
//     Schema SCHEMA = LOGICAL_TYPE.addToSchema(Schema.create(Schema.Type.BYTES));
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/type/TimestampType.java
// public interface TimestampType {
//     String NAME = "timestamp";
//     String DOC = "Timestamp representing the number of milliseconds since January 1, 1970, 00:00:00 GMT";
//     LogicalType LOGICAL_TYPE = new LogicalType(NAME);
//     int SIZE = Long.BYTES;
//     Schema SCHEMA = LOGICAL_TYPE.addToSchema(Schema.createFixed(NAME, DOC, null, SIZE));
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/type/UuidType.java
// public interface UuidType {
//     String NAME = LogicalTypes.uuid().getName();
//     String DOC = "UUID serialized via two long values: Its most significant and least significant 64 bits.";
//     int SIZE = 2 * Long.BYTES;
//     Schema SCHEMA = LogicalTypes.uuid().addToSchema(Schema.createFixed(NAME, DOC, null, SIZE));
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/type/PrimitiveType.java
// public enum PrimitiveType {
//     BOOLEAN(create(Schema.Type.BOOLEAN)),
//     DOUBLE(create(Schema.Type.DOUBLE)),
//     FLOAT(create(Schema.Type.FLOAT)),
//     INTEGER(create(Schema.Type.INT)),
//     LONG(create(Schema.Type.LONG)),
//     NULL(create(Schema.Type.NULL)),
//     STRING(create(Schema.Type.STRING));
// 
//     private final Schema schema;
// 
//     PrimitiveType(Schema schema) {
//         this.schema = schema;
//     }
// 
//     public Schema getSchema() {
//         return schema;
//     }
// }


import com.google.common.collect.ImmutableMap;
import io.datanerds.avropatch.operation.*;
import io.datanerds.avropatch.value.type.BigDecimalType;
import io.datanerds.avropatch.value.type.BigIntegerType;
import io.datanerds.avropatch.value.type.TimestampType;
import io.datanerds.avropatch.value.type.UuidType;
import org.apache.avro.Schema;
import java.io.IOException;
import java.util.*;
import static io.datanerds.avropatch.value.type.PrimitiveType.*;
import static org.apache.avro.Schema.createUnion;
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 OperationSerializationTester extends SerializationTester<Operation> {

    private static final Schema VALUE_TYPE_UNION = createUnion(BOOLEAN.getSchema(), DOUBLE.getSchema(),
            FLOAT.getSchema(), INTEGER.getSchema(), LONG.getSchema(), NULL.getSchema(), STRING.getSchema(),
// Path: src/main/java/io/datanerds/avropatch/value/type/BigDecimalType.java
// public interface BigDecimalType {
//     String NAME = "big-decimal";
//     String DOC = "BigDecimal value represented via its scale and unscaled value.";
//     LogicalType LOGICAL_TYPE = new LogicalType(NAME);
//     Schema RECORD = SchemaBuilder
//             .record("decimal")
//             .doc(DOC)
//             .fields()
//             .name("unscaledValue").type(BigIntegerType.SCHEMA).noDefault()
//             .name("scale").type(Schema.create(Schema.Type.INT)).noDefault()
//             .endRecord();
// 
//     Schema SCHEMA = LOGICAL_TYPE.addToSchema(RECORD);
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/type/BigIntegerType.java
// public interface BigIntegerType {
//     String NAME = "big-integer";
//     LogicalType LOGICAL_TYPE = new LogicalType(NAME);
//     Schema SCHEMA = LOGICAL_TYPE.addToSchema(Schema.create(Schema.Type.BYTES));
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/type/TimestampType.java
// public interface TimestampType {
//     String NAME = "timestamp";
//     String DOC = "Timestamp representing the number of milliseconds since January 1, 1970, 00:00:00 GMT";
//     LogicalType LOGICAL_TYPE = new LogicalType(NAME);
//     int SIZE = Long.BYTES;
//     Schema SCHEMA = LOGICAL_TYPE.addToSchema(Schema.createFixed(NAME, DOC, null, SIZE));
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/type/UuidType.java
// public interface UuidType {
//     String NAME = LogicalTypes.uuid().getName();
//     String DOC = "UUID serialized via two long values: Its most significant and least significant 64 bits.";
//     int SIZE = 2 * Long.BYTES;
//     Schema SCHEMA = LogicalTypes.uuid().addToSchema(Schema.createFixed(NAME, DOC, null, SIZE));
// }
// 
// Path: src/main/java/io/datanerds/avropatch/value/type/PrimitiveType.java
// public enum PrimitiveType {
//     BOOLEAN(create(Schema.Type.BOOLEAN)),
//     DOUBLE(create(Schema.Type.DOUBLE)),
//     FLOAT(create(Schema.Type.FLOAT)),
//     INTEGER(create(Schema.Type.INT)),
//     LONG(create(Schema.Type.LONG)),
//     NULL(create(Schema.Type.NULL)),
//     STRING(create(Schema.Type.STRING));
// 
//     private final Schema schema;
// 
//     PrimitiveType(Schema schema) {
//         this.schema = schema;
//     }
// 
//     public Schema getSchema() {
//         return schema;
//     }
// }


// Path: src/test/java/io/datanerds/avropatch/serialization/OperationSerializationTester.java
import com.google.common.collect.ImmutableMap;
import io.datanerds.avropatch.operation.*;
import io.datanerds.avropatch.value.type.BigDecimalType;
import io.datanerds.avropatch.value.type.BigIntegerType;
import io.datanerds.avropatch.value.type.TimestampType;
import io.datanerds.avropatch.value.type.UuidType;
import org.apache.avro.Schema;
import java.io.IOException;
import java.util.*;
import static io.datanerds.avropatch.value.type.PrimitiveType.*;
import static org.apache.avro.Schema.createUnion;
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 OperationSerializationTester extends SerializationTester<Operation> {

    private static final Schema VALUE_TYPE_UNION = createUnion(BOOLEAN.getSchema(), DOUBLE.getSchema(),
            FLOAT.getSchema(), INTEGER.getSchema(), LONG.getSchema(), NULL.getSchema(), STRING.getSchema(),
            BigDecimalType.SCHEMA, BigIntegerType.SCHEMA, TimestampType.SCHEMA, UuidType.SCHEMA);