Quick actions

cmd+k|ctrl+k

Navigation

Languages

Java Yeet

Snippet info

Language

Java

Visibility

public

Author

max.polster

Created

2019-06-24T19:57:18Z

Updated

2019-06-24T20:26:46Z

import java.text.MessageFormat;

interface Fn {
    void invoke();
}

class Sample {
    public Sample(final long original, final long improved) {
        this.original = original;
        this.improved = improved;
    }

    public final long original;
    public final long improved;

    public static Sample create(final Fn original, final Fn improved, final int size) {
        final long a = System.nanoTime();
        for (int i = 0; i < size; i++) {
            original.invoke();
        }
        final long b = System.nanoTime();
        for (int i = 0; i < size; i++) {
            improved.invoke();
        }
        final long c = System.nanoTime();
        return new Sample(b - a, c - b);
    }
    
    public static Sample[] createMany(final Fn original, final Fn improved, final int size, final int count) {
        final Sample[] samples = new Sample[count];
        for (int i = 0; i < count; i++) {
            samples[i] = create(original, improved, size);
        }
        return samples;
    }
}

class Average {
    public Average(final Sample[] samples) {
        long original = 0;
        long improved = 0;
        for (int i = 0; i < samples.length; i++) {
            original += samples[i].original;
            improved += samples[i].improved;
        }
        this.original = original / samples.length;
        this.improved = improved / samples.length;
    }
    
    public final long original;
    public final long improved;
    
    public String format() {
        return MessageFormat.format("Original took {0}ms, improved took {1}ms (per sample).",
            this.original / 1000d,
            this.improved / 1000d);
    }
    
    public void print() {
        System.out.println(this.format());
    }
}

class Main {
    public static void main(String[] args) {
        new Average(Sample.createMany(() -> {
        }, () -> {
            for (int i = 0; i < 1000; i++) {}
        }, 5, 500_000)).print();
    }
}
INFO