class OpenTelemetryCounter {

        final LongCounter longCounter;
        final DoubleCounter doubleCounter;
        final Attributes attributes;

        public OpenTelemetryCounter() {

            SdkMeterProvider sdkMeterProvider = SdkMeterProvider.builder()
                    .registerMetricReader(InMemoryMetricReader.create())
                    .setResource(Resource.getDefault())
                    .build();
            OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
                    .setMeterProvider(sdkMeterProvider)
                    .build();
            Meter meter = openTelemetry
                    .meterBuilder("instrumentation-library-name")
                    .setInstrumentationVersion("1.0.0")
                    .build();
            this.longCounter = meter
                    .counterBuilder("test1")
                    .setDescription("test")
                    .build();
            this.doubleCounter = meter
                    .counterBuilder("test2")
                    .ofDoubles()
                    .setDescription("test")
                    .build();
            this.attributes = Attributes.of(
                    AttributeKey.stringKey("path"), "/",
                    AttributeKey.stringKey("status"), "200");
        }
    }

    @Benchmark
    @Threads(4)
    public CounterDataPoint prometheusAdd(RandomNumbers randomNumbers, PrometheusCounter counter) {
        for (int i=0; i<randomNumbers.randomNumbers.length; i++) {
            counter.dataPoint.inc(randomNumbers.randomNumbers[i]);
        }
        return counter.dataPoint;
    }

    @Benchmark
    @Threads(4)
    public CounterDataPoint prometheusInc(PrometheusCounter counter) {
        for (int i=0; i<10*1024; i++) {
            counter.dataPoint.inc();
        }
        return counter.dataPoint;
    }

    @Benchmark
    @Threads(4)
    public DoubleCounter openTelemetryAdd(RandomNumbers randomNumbers, OpenTelemetryCounter counter) {
        for (int i=0; i<randomNumbers.randomNumbers.length; i++) {
            counter.doubleCounter.add(randomNumbers.randomNumbers[i], counter.attributes);
        }
        return counter.doubleCounter;
    }

    @Benchmark
    @Threads(4)
    public LongCounter openTelemetryInc(OpenTelemetryCounter counter) {<FILL_FUNCTION_BODY>

        for (int i=0; i<10*1024; i++) {
            counter.longCounter.add(1, counter.attributes);
        }
        return counter.longCounter;
    
<no_super_class>