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

Quelle  Main.java

  Sprache: JAVA
 

/*
 * Copyright (C) 2014 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.LinkedList;
import java.util.List;

/**
 * Smali exercise.
 */

public class Main {

    private static class TestCase {
        public TestCase(String testName, String testClass, String testMethodName, Object[] values,
                        Throwable expectedException, Object expectedReturn,
                        boolean checkCompiled) {
            this.testName = testName;
            this.testClass = testClass;
            this.testMethodName = testMethodName;
            this.values = values;
            this.expectedException = expectedException;
            this.expectedReturn = expectedReturn;
            this.checkCompiled = checkCompiled;
        }

        public TestCase(String testName, String testClass, String testMethodName, Object[] values,
                        Throwable expectedException, Object expectedReturn) {
            this(testName, testClass, testMethodName, values, expectedException,
                 expectedReturn, false);
        }

        String testName;
        String testClass;
        String testMethodName;
        Object[] values;
        Throwable expectedException;
        Object expectedReturn;
        boolean checkCompiled;
    }

    private List<TestCase> testCases;

    public Main() {
        // Create the test cases.
        testCases = new LinkedList<TestCase>();
        testCases.add(new TestCase("PackedSwitch""PackedSwitch""packedSwitch",
                new Object[]{123}, null123));
        testCases.add(new TestCase("PackedSwitch key INT_MAX""PackedSwitch",
                "packedSwitch_INT_MAX"new Object[]{123}, null123));
        testCases.add(new TestCase("PackedSwitch key overflow""b_24399945",
                "packedSwitch_overflow"new Object[]{123}, new VerifyError(), null));

        testCases.add(new TestCase("b/17790197""B17790197""getInt"nullnull100));
        testCases.add(new TestCase("FloatBadArgReg""FloatBadArgReg""getInt",
                new Object[]{100}, null100));
        testCases.add(new TestCase("negLong""negLong""negLong"nullnull122142L));
        testCases.add(new TestCase("sameFieldNames""sameFieldNames""getInt"nullnull7));
        testCases.add(new TestCase("b/18380491""B18380491ConcreteClass""foo",
                new Object[]{42}, null42));
        testCases.add(new TestCase("invoke-super abstract""B18380491ConcreteClass""foo",
                new Object[]{0}, new AbstractMethodError(), null));
        testCases.add(new TestCase("BadCaseInOpRegRegReg""BadCaseInOpRegRegReg""getInt"null,
                null2));
        testCases.add(new TestCase("CmpLong""CmpLong""run"nullnull0));
        testCases.add(new TestCase("FloatIntConstPassing""FloatIntConstPassing""run"null,
                null2));
        testCases.add(new TestCase("b/18718277""B18718277""getInt"nullnull0));
        testCases.add(new TestCase("b/18800943 (1)""B18800943_1""n_a"nullnew VerifyError(),
                0));
        testCases.add(new TestCase("b/18800943 (2)""B18800943_2""n_a"nullnew VerifyError(),
                0));
        testCases.add(new TestCase("MoveExc""MoveExc""run"nullnew ArithmeticException(),
                null));
        testCases.add(new TestCase("MoveExceptionOnEntry""MoveExceptionOnEntry",
            "moveExceptionOnEntry"new Object[]{0}, new VerifyError(), null));
        testCases.add(new TestCase("EmptySparseSwitch""EmptySparseSwitch""run"nullnull,
                null));
        testCases.add(new TestCase("b/20224106""B20224106""run"nullnew VerifyError(),
                0));
        testCases.add(new TestCase("b/17410612""B17410612""run"nullnew VerifyError(),
                0));
        testCases.add(new TestCase("b/21863767""B21863767""run"nullnull,
                null));
        testCases.add(new TestCase("b/21873167""B21873167""test"nullnullnull));
        testCases.add(new TestCase("b/21614284""B21614284""test"new Object[] { null },
                new NullPointerException(), null));
        testCases.add(new TestCase("b/21902684""B21902684""test"nullnullnull));
        testCases.add(new TestCase("b/22045582""B22045582""run"nullnew VerifyError(),
                0));
        testCases.add(new TestCase("b/22045582 (int)""B22045582Int""run"null,
                new VerifyError(), 0));
        testCases.add(new TestCase("b/22045582 (wide)""B22045582Wide""run"null,
                new VerifyError(), 0));
        testCases.add(new TestCase("b/21886894""B21886894""test"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/22080519""B22080519""run"null,
                new NullPointerException(), null));
        testCases.add(new TestCase("b/21645819""B21645819""run"new Object[] { null },
                nullnull));
        testCases.add(new TestCase("b/22244733""B22244733""run"new Object[] { "abc" },
                null"abc"));
        testCases.add(new TestCase(
                "b/22331663""B22331663""run"new Object[] {false}, new VerifyError(), null));
        testCases.add(new TestCase("b/22331663 (pass)""B22331663Pass""run",
                new Object[] { false }, nullnull));
        testCases.add(new TestCase("b/22331663 (fail)""B22331663Fail""run",
                new Object[] { false }, new VerifyError(), null));
        testCases.add(new TestCase("b/22411633 (1)""B22411633_1""run"new Object[] { false },
                nullnull));
        testCases.add(new TestCase("b/22411633 (2)""B22411633_2""run"new Object[] { false },
                new VerifyError(), null));
        testCases.add(new TestCase("b/22411633 (3)""B22411633_3""run"new Object[] { false },
                nullnull));
        testCases.add(new TestCase("b/22411633 (4)""B22411633_4""run"new Object[] { false },
                new VerifyError(), null));
        testCases.add(new TestCase("b/22411633 (5)""B22411633_5""run"new Object[] { false },
                nullnull));
        testCases.add(new TestCase("b/22777307""B22777307""run"nullnew InstantiationError(),
                null));
        testCases.add(new TestCase("b/22881413""B22881413""run"nullnullnull));
        testCases.add(new TestCase("b/20843113""B20843113""run"nullnullnull));
        testCases.add(new TestCase("b/23201502 (float)""B23201502""runFloat"null,
                new NullPointerException(), null));
        testCases.add(new TestCase("b/23201502 (double)""B23201502""runDouble"null,
                new NullPointerException(), null));
        testCases.add(new TestCase("b/23300986""B23300986""runAliasAfterEnter",
                new Object[] { new Object() }, nullnull));
        testCases.add(new TestCase("b/23300986 (2)""B23300986""runAliasBeforeEnter",
                new Object[] { new Object() }, nullnull));
        testCases.add(new TestCase("b/23502994 (if-eqz)""B23502994""runIF_EQZ",
                new Object[] { new Object() }, nullnull));
        testCases.add(new TestCase("b/23502994 (check-cast)""B23502994""runCHECKCAST",
                new Object[] { "abc" }, nullnull));
        testCases.add(new TestCase("b/25494456""B25494456""run"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/21869691""B21869691A""run"null,
                new IncompatibleClassChangeError(), null));
        testCases.add(new TestCase("b/26143249""B26143249""run"null,
                new AbstractMethodError(), null));
        testCases.add(new TestCase("b/26579108""B26579108""run"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/26594149 (1)""B26594149_1""run"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/26594149 (2)""B26594149_2""run"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/26594149 (3)""B26594149_3""run"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/26594149 (4)""B26594149_4""run"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/26594149 (5)""B26594149_5""run"nullnullnull));
        testCases.add(new TestCase("b/26594149 (6)""B26594149_6""run"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/26594149 (7)""B26594149_7""run"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/26594149 (8)""B26594149_8""run"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/27148248""B27148248""run"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/26965384""B26965384""run"nullnew VerifyError(),
                null));
        testCases.add(new TestCase("b/27799205 (1)""B27799205Helper""run1"nullnullnull));
        testCases.add(new TestCase("b/27799205 (2)""B27799205Helper""run2"null,
                new VerifyError(), null));
        testCases.add(new TestCase("b/27799205 (3)""B27799205Helper""run3"null,
                new VerifyError(), null));
        testCases.add(new TestCase("b/27799205 (4)""B27799205Helper""run4"null,
                new VerifyError(), null));
        testCases.add(new TestCase("b/27799205 (5)""B27799205Helper""run5"null,
                new VerifyError(), null));
        testCases.add(new TestCase("b/27799205 (6)""B27799205Helper""run6"nullnullnull));
        testCases.add(new TestCase("b/28187158 (1)""B28187158""run"new Object[] { null },
                new VerifyError(), null));
        testCases.add(new TestCase("b/28187158 (2)""B28187158_2Helper""run"null,
                new NullPointerException(), null));
        testCases.add(new TestCase("b/29778499 (1)""B29778499_1""run"null,
                new IncompatibleClassChangeError(), null));
        testCases.add(new TestCase("b/29778499 (2)""B29778499_2""run"null,
                new IncompatibleClassChangeError(), null));
        testCases.add(new TestCase("b/30458218""B30458218""run"nullnullnull));
        testCases.add(new TestCase("b/31313170""B31313170""run"nullnull0));
        testCases.add(new TestCase("ConstClassAliasing""ConstClassAliasing""run"nullnull,
                nulltrue));
        testCases.add(new TestCase("b/121191566""B121191566""run"new Object[] { "a" }, null,
                truefalse));
        testCases.add(new TestCase("b/122501785""B122501785""run"nullnew VerifyError(),
                0));
        testCases.add(new TestCase("b/134061982""B134061982""run"new Object[] { 0 },
                new NullPointerException(), 0));
        testCases.add(new TestCase("b/134061982 (2)""B134061982_2""run"new Object[] { 0 },
                new VerifyError(), 0));
        testCases.add(new TestCase("b/121245951""B121245951""run"new Object[] { true,
                new Object() }, new IllegalMonitorStateException(), 0));
        testCases.add(new TestCase("b/121245951 (2)""B121245951_2""run"new Object[] { true,
                new Object() }, new VerifyError(), 0));
        testCases.add(new TestCase("b/121245951 (3)""B121245951_3""run"new Object[] {
                new Object() }, new IllegalMonitorStateException(), 0));
        testCases.add(
                new TestCase("b/441467737""B441467737""run"nullnew VerifyError(), null));
    }

    public void runTests() {
        for (TestCase tc : testCases) {
            System.out.println(tc.testName);
            try {
                runTest(tc);
            } catch (Exception exc) {
                exc.printStackTrace(System.out);
            }
        }
    }

    private void runTest(TestCase tc) throws Exception {
        Exception errorReturn = null;
        try {
            Class<?> c = Class.forName(tc.testClass);

            Method[] methods = c.getDeclaredMethods();

            // For simplicity we assume that test methods are not overloaded. So searching by name
            // will give us the method we need to run.
            Method method = null;
            for (Method m : methods) {
                if (m.getName().equals(tc.testMethodName)) {
                    method = m;
                    break;
                }
            }

            if (method == null) {
                errorReturn = new IllegalArgumentException("Could not find test method " +
                                                           tc.testMethodName + " in class " +
                                                           tc.testClass + " for test " +
                                                           tc.testName);
            } else {
                Object retValue;
                if (Modifier.isStatic(method.getModifiers())) {
                    retValue = method.invoke(null, tc.values);
                } else {
                    retValue = method.invoke(method.getDeclaringClass().newInstance(), tc.values);
                }
                if (tc.expectedException != null) {
                    errorReturn = new IllegalStateException("Expected an exception in test " +
                                                            tc.testName);
                } else if (tc.expectedReturn == null && retValue != null) {
                    errorReturn = new IllegalStateException("Expected a null result in test " +
                                                            tc.testName + " got " + retValue);
                } else if (tc.expectedReturn != null &&
                           (retValue == null || !tc.expectedReturn.equals(retValue))) {
                    errorReturn = new IllegalStateException("Expected return " +
                                                            tc.expectedReturn +
                                                            ", but got " + retValue);
                } else if (tc.checkCompiled && compiledWithOptimizing() && !isAotVerified(c)) {
                    errorReturn = new IllegalStateException("Expected method " + method.getName() +
                            " of class " + c.getName() +
                            " be verified in compile-time in test " + tc.testName);
                } else {
                    // Expected result, do nothing.
                }
            }
        } catch (Throwable exc) {
            if (tc.expectedException == null) {
                errorReturn = new IllegalStateException("Did not expect exception", exc);
            } else if (exc instanceof InvocationTargetException && exc.getCause() != null &&
                       exc.getCause().getClass().equals(tc.expectedException.getClass())) {
                // Expected exception is wrapped in InvocationTargetException.
            } else if (!tc.expectedException.getClass().equals(exc.getClass())) {
                errorReturn = new IllegalStateException("Expected " +
                                                        tc.expectedException.getClass().getName() +
                                                        ", but got " + exc.getClass(), exc);
            } else {
                // Expected exception, do nothing.
            }
        } finally {
            if (errorReturn != null) {
                throw errorReturn;
            }
        }
    }

    public static void main(String[] args) throws Exception {
        System.loadLibrary(args[0]);

        Main main = new Main();

        main.runTests();

        System.out.println("Done!");
    }

    private native static boolean isAotVerified(Class<?> cls);
    private native static boolean compiledWithOptimizing();
}

Messung V0.5 in Prozent
C=90 H=98 G=94

¤ Dauer der Verarbeitung: 0.1 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.