// Path: src/test/java/io/datanerds/avropatch/value/Bimmel.java
// public class Bimmel {
// 
//     public final String name;
//     public final int number;
//     public final UUID id;
//     public final Bommel bommel;
// 
//     @SuppressWarnings("unused") // no-arg constructor for Avro
//     private Bimmel() {
//         this(null, -42, null, null);
//     }
// 
//     public Bimmel(String name, int number, UUID id, Bommel bommel) {
//         this.name = name;
//         this.number = number;
//         this.id = id;
//         this.bommel = bommel;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
//         Bimmel bimmel = (Bimmel) o;
//         return number == bimmel.number &&
//                 Objects.equals(name, bimmel.name) &&
//                 Objects.equals(id, bimmel.id) &&
//                 Objects.equals(bommel, bimmel.bommel);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(name, number, id, bommel);
//     }
// 
//     public static class Bommel {
//         public final String name;
// 
//         @SuppressWarnings("unused")
//         private Bommel() {
//             this(null);
//         }
// 
//         public Bommel(String name) {
//             this.name = name;
//         }
// 
//         @Override
//         public boolean equals(Object o) {
//             if (this == o) {
//                 return true;
//             }
//             if (o == null || getClass() != o.getClass()) {
//                 return false;
//             }
//             Bommel bommel = (Bommel) o;
//             return Objects.equals(name, bommel.name);
//         }
// 
//         @Override
//         public int hashCode() {
//             return Objects.hash(name);
//         }
//     }
// }


import io.datanerds.avropatch.value.Bimmel;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
            return values()[random.nextInt(ValueType.values().length)];
        }

        private static List<?> generateList(ValueType type) {
            return IntStream
                    .range(0, MAX_LIST_SIZE)
                    .mapToObj(i -> type.generate())
                    .collect(Collectors.toList());
        }

        private static String randomString() {
            return java.util.UUID.randomUUID().toString();
        }

        private static BigDecimal randomBigDecimal() {
            BigInteger unscaledValue = new BigInteger(random.nextInt(256), random);
            int numberOfDigits = getDigitCount(unscaledValue);
            int scale = random.nextInt(numberOfDigits + 1);
            return new BigDecimal(unscaledValue, scale);
        }

        private static int getDigitCount(BigInteger number) {
            double factor = Math.log(2) / Math.log(10);
            int digitCount = (int) (factor * number.bitLength() + 1);
            if (BigInteger.TEN.pow(digitCount - 1).compareTo(number) > 0) {
                return digitCount - 1;
            }
            return digitCount;
        }

// Path: src/test/java/io/datanerds/avropatch/value/Bimmel.java
// public class Bimmel {
// 
//     public final String name;
//     public final int number;
//     public final UUID id;
//     public final Bommel bommel;
// 
//     @SuppressWarnings("unused") // no-arg constructor for Avro
//     private Bimmel() {
//         this(null, -42, null, null);
//     }
// 
//     public Bimmel(String name, int number, UUID id, Bommel bommel) {
//         this.name = name;
//         this.number = number;
//         this.id = id;
//         this.bommel = bommel;
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) {
//             return true;
//         }
//         if (o == null || getClass() != o.getClass()) {
//             return false;
//         }
//         Bimmel bimmel = (Bimmel) o;
//         return number == bimmel.number &&
//                 Objects.equals(name, bimmel.name) &&
//                 Objects.equals(id, bimmel.id) &&
//                 Objects.equals(bommel, bimmel.bommel);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(name, number, id, bommel);
//     }
// 
//     public static class Bommel {
//         public final String name;
// 
//         @SuppressWarnings("unused")
//         private Bommel() {
//             this(null);
//         }
// 
//         public Bommel(String name) {
//             this.name = name;
//         }
// 
//         @Override
//         public boolean equals(Object o) {
//             if (this == o) {
//                 return true;
//             }
//             if (o == null || getClass() != o.getClass()) {
//                 return false;
//             }
//             Bommel bommel = (Bommel) o;
//             return Objects.equals(name, bommel.name);
//         }
// 
//         @Override
//         public int hashCode() {
//             return Objects.hash(name);
//         }
//     }
// }


// Path: src/test/java/io/datanerds/avropatch/operation/OperationGenerator.java
import io.datanerds.avropatch.value.Bimmel;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.*;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

            return values()[random.nextInt(ValueType.values().length)];
        }

        private static List<?> generateList(ValueType type) {
            return IntStream
                    .range(0, MAX_LIST_SIZE)
                    .mapToObj(i -> type.generate())
                    .collect(Collectors.toList());
        }

        private static String randomString() {
            return java.util.UUID.randomUUID().toString();
        }

        private static BigDecimal randomBigDecimal() {
            BigInteger unscaledValue = new BigInteger(random.nextInt(256), random);
            int numberOfDigits = getDigitCount(unscaledValue);
            int scale = random.nextInt(numberOfDigits + 1);
            return new BigDecimal(unscaledValue, scale);
        }

        private static int getDigitCount(BigInteger number) {
            double factor = Math.log(2) / Math.log(10);
            int digitCount = (int) (factor * number.bitLength() + 1);
            if (BigInteger.TEN.pow(digitCount - 1).compareTo(number) > 0) {
                return digitCount - 1;
            }
            return digitCount;
        }

        private static Bimmel randomBimmel() {