// Path: iextrading4j-hist-api/src/main/java/pl/zankowski/iextrading4j/hist/api/message/IEXSegment.java
// public abstract class IEXSegment {
// 
//     private final IEXMessageHeader messageHeader;
//     private final List<IEXMessage> messages;
// 
//     protected IEXSegment(
//             final IEXMessageHeader messageHeader,
//             final List<IEXMessage> messages) {
//         this.messageHeader = messageHeader;
//         this.messages = new ArrayList<>(messages);
//     }
// 
//     public IEXMessageHeader getMessageHeader() {
//         return messageHeader;
//     }
// 
//     public List<IEXMessage> getMessages() {
//         return new ArrayList<>(messages);
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         IEXSegment that = (IEXSegment) o;
//         return Objects.equals(messageHeader, that.messageHeader) &&
//                 Objects.equals(messages, that.messages);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(messageHeader, messages);
//     }
// 
//     @Override
//     public String toString() {
//         return "IEXSegment{" +
//                 "messageHeader=" + messageHeader +
//                 ", messages=" + messages +
//                 '}';
//     }
// }
// 
// Path: iextrading4j-hist-tops/src/main/java/pl/zankowski/iextrading4j/hist/tops/IEXTOPSMessageBlock.java
// public static IEXSegment createIEXSegment(final byte[] packet) {
//     final List<IEXMessage> iexMessages = new ArrayList<>();
//     int offset = 40;
// 
//     final IEXMessageHeader iexMessageHeader = IEXMessageHeader.createIEXMessageHeader(Arrays.copyOfRange(packet, 0, offset));
// 
//     for (int i = 0; i < iexMessageHeader.getMessageCount(); i++) {
//         short length = IEXByteConverter.convertBytesToShort(Arrays.copyOfRange(packet, offset, offset = offset + 2));
//         iexMessages.add(resolveMessage(Arrays.copyOfRange(packet, offset, offset = offset + length)));
//     }
// 
//     return new IEXTOPSMessageBlock(iexMessageHeader, iexMessages);
// }


import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Level;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import pl.zankowski.iextrading4j.hist.api.message.IEXSegment;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import static pl.zankowski.iextrading4j.hist.tops.IEXTOPSMessageBlock.createIEXSegment;
package pl.zankowski.iextrading4j.hist.perf;




public class BigSegmentBenchmark extends PerformanceTestBase {

    @State(Scope.Benchmark)
    public static class BenchmarkState {

        public byte[] packet;

        @Setup(Level.Trial)
        public void doSetup() throws IOException {
            packet = loadPacket("BigTopsSegment.dump");
        }

    }

    @Benchmark
    @BenchmarkMode(Mode.AverageTime)
    @OutputTimeUnit(TimeUnit.MICROSECONDS)
    public IEXSegment bigSegmentBenchmark(final BenchmarkState benchmarkState) {
// Path: iextrading4j-hist-api/src/main/java/pl/zankowski/iextrading4j/hist/api/message/IEXSegment.java
// public abstract class IEXSegment {
// 
//     private final IEXMessageHeader messageHeader;
//     private final List<IEXMessage> messages;
// 
//     protected IEXSegment(
//             final IEXMessageHeader messageHeader,
//             final List<IEXMessage> messages) {
//         this.messageHeader = messageHeader;
//         this.messages = new ArrayList<>(messages);
//     }
// 
//     public IEXMessageHeader getMessageHeader() {
//         return messageHeader;
//     }
// 
//     public List<IEXMessage> getMessages() {
//         return new ArrayList<>(messages);
//     }
// 
//     @Override
//     public boolean equals(Object o) {
//         if (this == o) return true;
//         if (o == null || getClass() != o.getClass()) return false;
//         IEXSegment that = (IEXSegment) o;
//         return Objects.equals(messageHeader, that.messageHeader) &&
//                 Objects.equals(messages, that.messages);
//     }
// 
//     @Override
//     public int hashCode() {
//         return Objects.hash(messageHeader, messages);
//     }
// 
//     @Override
//     public String toString() {
//         return "IEXSegment{" +
//                 "messageHeader=" + messageHeader +
//                 ", messages=" + messages +
//                 '}';
//     }
// }
// 
// Path: iextrading4j-hist-tops/src/main/java/pl/zankowski/iextrading4j/hist/tops/IEXTOPSMessageBlock.java
// public static IEXSegment createIEXSegment(final byte[] packet) {
//     final List<IEXMessage> iexMessages = new ArrayList<>();
//     int offset = 40;
// 
//     final IEXMessageHeader iexMessageHeader = IEXMessageHeader.createIEXMessageHeader(Arrays.copyOfRange(packet, 0, offset));
// 
//     for (int i = 0; i < iexMessageHeader.getMessageCount(); i++) {
//         short length = IEXByteConverter.convertBytesToShort(Arrays.copyOfRange(packet, offset, offset = offset + 2));
//         iexMessages.add(resolveMessage(Arrays.copyOfRange(packet, offset, offset = offset + length)));
//     }
// 
//     return new IEXTOPSMessageBlock(iexMessageHeader, iexMessages);
// }


// Path: iextrading4j-hist-performance/src/main/java/pl/zankowski/iextrading4j/hist/perf/BigSegmentBenchmark.java
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Level;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import pl.zankowski.iextrading4j.hist.api.message.IEXSegment;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import static pl.zankowski.iextrading4j.hist.tops.IEXTOPSMessageBlock.createIEXSegment;

package pl.zankowski.iextrading4j.hist.perf;




public class BigSegmentBenchmark extends PerformanceTestBase {

    @State(Scope.Benchmark)
    public static class BenchmarkState {

        public byte[] packet;

        @Setup(Level.Trial)
        public void doSetup() throws IOException {
            packet = loadPacket("BigTopsSegment.dump");
        }

    }

    @Benchmark
    @BenchmarkMode(Mode.AverageTime)
    @OutputTimeUnit(TimeUnit.MICROSECONDS)
    public IEXSegment bigSegmentBenchmark(final BenchmarkState benchmarkState) {
        return createIEXSegment(benchmarkState.packet);