Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Android/art/art/test/055-enum-performance/src/   (Android Betriebssystem Version 17©)  Datei vom 26.5.2026 mit Größe 7 kB image not shown  

Quelle  Main.java

  Sprache: JAVA
 

import otherpackage.OtherPackagePublicEnum;

import java.lang.reflect.*;

public class Main {
    /** used by {@link #basisCall} */
    static private int basisTestValue = 12;

    static public void main(String[] args) throws Exception {
        try {
            Class<?> enumClass = Enum.class;
            Method enumValueOf = null;
            for (Method m : enumClass.getDeclaredMethods()) {
                if (m.getName().equals("valueOf")) {
                    enumValueOf = m;
                    break;
                }
            }
            enumValueOf.invoke(null, String.class"blah");
            throw new AssertionError();
        } catch (InvocationTargetException expected) {
            IllegalArgumentException iae = (IllegalArgumentException) expected.getCause();
            if (!iae.getMessage().equals("class java.lang.String is not an enum type.")) {
                throw new AssertionError();
            }
        }

        boolean timing = (args.length >= 1) && args[0].equals("--timing");
        run(timing);
    }

    static public void run(boolean timing) {
        preTest();

        long time0 = System.nanoTime();
        int count1 = test1(500);
        long time1 = System.nanoTime();
        int count2 = test2(500);
        long time2 = System.nanoTime();
        int count3 = test3(500);
        long time3 = System.nanoTime();
        int count4 = basis(500);
        long time4 = System.nanoTime();

        System.out.println("basis: performed " + count4 + " iterations");
        System.out.println("test1: performed " + count1 + " iterations");
        System.out.println("test2: performed " + count2 + " iterations");
        System.out.println("test3: performed " + count3 + " iterations");

        double msec1 = (time1 - time0) / (double) count1 / 1000000;
        double msec2 = (time2 - time1) / (double) count2 / 1000000;
        double msec3 = (time3 - time2) / (double) count3 / 1000000;
        double basisMsec = (time4 - time3) / (double) count4 / 1000000;

        double avg = (msec1 + msec2 + msec3) / 3;
        if (avg < (basisMsec * 10)) {
            System.out.println("Timing is acceptable.");
        } else {
            System.out.println("Iterations are taking too long!");
            timing = true;
        }

        if (timing) {
            System.out.printf("basis time: %.3g msec\n", basisMsec);
            System.out.printf("test1: %.3g msec per iteration\n", msec1);
            System.out.printf("test2: %.3g msec per iteration\n", msec2);
            System.out.printf("test3: %.3g msec per iteration\n", msec3);
        }

    }

    static public void preTest() {
        /*
         * This is meant to ensure that the basic enum functionality
         * really is working.
         */


        Class<SamePackagePublicEnum> c = SamePackagePublicEnum.class;

        System.out.println(Enum.valueOf(c, "FOUR"));
        System.out.println(Enum.valueOf(c, "ONE"));
        System.out.println(Enum.valueOf(c, "FOURTEEN"));
        System.out.println(Enum.valueOf(c, "NINE"));
        System.out.println(Enum.valueOf(c, "FIVE"));
        System.out.println(Enum.valueOf(c, "TWELVE"));

        System.out.println(Enum.valueOf(c, "ZERO").getClass().getName());
    }

    static final String[] BASIS_COMPARE_ARRAY = {
        "ZERO""ONE""TWO""THREE""FOUR""FIVE""SIX""SEVEN""EIGHT",
        "NINE""TEN""ELEVEN""TWELVE""THIRTEEN""FOURTEEN""FIFTEEN",
        "SIXTEEN""SEVENTEEN""EIGHTEEN""NINETEEN"
    };

    static public int basis(int iters) {
        for (int i = iters; i > 0; i--) {
            basisValueOf("ZERO");
            basisValueOf("ONE");
            basisValueOf("TWO");
            basisValueOf("THREE");
            basisValueOf("FOUR");
            basisValueOf("FIVE");
            basisValueOf("SIX");
            basisValueOf("SEVEN");
            basisValueOf("EIGHT");
            basisValueOf("NINE");
            basisValueOf("TEN");
            basisValueOf("ELEVEN");
            basisValueOf("TWELVE");
            basisValueOf("THIRTEEN");
            basisValueOf("FOURTEEN");
            basisValueOf("FIFTEEN");
            basisValueOf("SIXTEEN");
            basisValueOf("SEVENTEEN");
            basisValueOf("EIGHTEEN");
            basisValueOf("NINETEEN");
        }

        return iters * 20;
    }

    static String basisValueOf(String key) {
        for (String s : BASIS_COMPARE_ARRAY) {
            if (s.equals(key)) {
                return s;
            }
        }
        throw new IllegalArgumentException();
    }

    static public int test1(int iters) {
        Class<SamePackagePublicEnum> c = SamePackagePublicEnum.class;
        for (int i = iters; i > 0; i--) {
            Enum.valueOf(c, "ZERO");
            Enum.valueOf(c, "ONE");
            Enum.valueOf(c, "TWO");
            Enum.valueOf(c, "THREE");
            Enum.valueOf(c, "FOUR");
            Enum.valueOf(c, "FIVE");
            Enum.valueOf(c, "SIX");
            Enum.valueOf(c, "SEVEN");
            Enum.valueOf(c, "EIGHT");
            Enum.valueOf(c, "NINE");
            Enum.valueOf(c, "TEN");
            Enum.valueOf(c, "ELEVEN");
            Enum.valueOf(c, "TWELVE");
            Enum.valueOf(c, "THIRTEEN");
            Enum.valueOf(c, "FOURTEEN");
            Enum.valueOf(c, "FIFTEEN");
            Enum.valueOf(c, "SIXTEEN");
            Enum.valueOf(c, "SEVENTEEN");
            Enum.valueOf(c, "EIGHTEEN");
            Enum.valueOf(c, "NINETEEN");
        }

        return iters * 20;
    }

    static public int test2(int iters) {
        Class<SamePackagePrivateEnum> c = SamePackagePrivateEnum.class;
        for (int i = iters; i > 0; i--) {
            Enum.valueOf(c, "ZERO");
            Enum.valueOf(c, "ONE");
            Enum.valueOf(c, "TWO");
            Enum.valueOf(c, "THREE");
            Enum.valueOf(c, "FOUR");
            Enum.valueOf(c, "FIVE");
            Enum.valueOf(c, "SIX");
            Enum.valueOf(c, "SEVEN");
            Enum.valueOf(c, "EIGHT");
            Enum.valueOf(c, "NINE");
            Enum.valueOf(c, "TEN");
            Enum.valueOf(c, "ELEVEN");
            Enum.valueOf(c, "TWELVE");
            Enum.valueOf(c, "THIRTEEN");
            Enum.valueOf(c, "FOURTEEN");
            Enum.valueOf(c, "FIFTEEN");
            Enum.valueOf(c, "SIXTEEN");
            Enum.valueOf(c, "SEVENTEEN");
            Enum.valueOf(c, "EIGHTEEN");
            Enum.valueOf(c, "NINETEEN");
        }

        return iters * 20;
    }

    static public int test3(int iters) {
        Class<OtherPackagePublicEnum> c = OtherPackagePublicEnum.class;
        for (int i = iters; i > 0; i--) {
            Enum.valueOf(c, "ZERO");
            Enum.valueOf(c, "ONE");
            Enum.valueOf(c, "TWO");
            Enum.valueOf(c, "THREE");
            Enum.valueOf(c, "FOUR");
            Enum.valueOf(c, "FIVE");
            Enum.valueOf(c, "SIX");
            Enum.valueOf(c, "SEVEN");
            Enum.valueOf(c, "EIGHT");
            Enum.valueOf(c, "NINE");
            Enum.valueOf(c, "TEN");
            Enum.valueOf(c, "ELEVEN");
            Enum.valueOf(c, "TWELVE");
            Enum.valueOf(c, "THIRTEEN");
            Enum.valueOf(c, "FOURTEEN");
            Enum.valueOf(c, "FIFTEEN");
            Enum.valueOf(c, "SIXTEEN");
            Enum.valueOf(c, "SEVENTEEN");
            Enum.valueOf(c, "EIGHTEEN");
            Enum.valueOf(c, "NINETEEN");
        }

        return iters * 20;
    }
}

Messung V0.5 in Prozent
C=78 H=76 G=76

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet am  2026-06-29) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.