/* * 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. */ public class Main { public static void main(String[] args) { assertEquals(4.2f, returnFloat()); float[] a = new float[2]; a[0] = 42.2f; a[1] = 3.2f; assertEquals(45.4f, returnFloat(a)); assertEquals(4.4, returnDouble()); double[] b = new double[1]; b[0] = 42.4; assertEquals(42.4, returnDouble(b)); assertEquals(4.2f, invokeReturnFloat()); assertEquals(4.4, invokeReturnDouble()); assertEquals(4.2f, takeAFloat(4.2f)); assertEquals(3.1, takeADouble(3.1)); assertEquals(12.7, takeThreeDouble(3.1, 4.4, 5.2)); assertEquals(12.7f, takeThreeFloat(3.1f, 4.4f, 5.2f)); assertEquals(4.2f, invokeTakeAFloat(4.2f)); assertEquals(3.1, invokeTakeADouble(3.1)); assertEquals(12.7, invokeTakeThreeDouble(3.1, 4.4, 5.2)); assertEquals(12.7f, invokeTakeThreeFloat(3.1f, 4.4f, 5.2f)); testArrayOperations(new float[2], 0, 1.2f, 3.4f); testArrayOperations(new double[2], 0, 4.1, 7.6); } public static float invokeReturnFloat() { return returnFloat(); } public static double invokeReturnDouble() { return returnDouble(); } public static float returnFloat() { return 4.2f; } public static float returnFloat(float[] a) { return a[0] + a[1]; } public static double returnDouble() { return 4.4; } public static double returnDouble(double[] a) { return a[0]; } public static float takeAFloat(float a) { return a; } public static double takeADouble(double a) { return a; } public static double takeThreeDouble(double a, double b, double c) { return a + b + c; } public static float takeThreeFloat(float a, float b, float c) { return a + b + c; } public static float invokeTakeAFloat(float a) { return takeAFloat(a); } public static double invokeTakeADouble(double a) { return takeADouble(a); } public static double invokeTakeThreeDouble(double a, double b, double c) { return takeThreeDouble(a, b, c); } public static float invokeTakeThreeFloat(float a, float b, float c) { return takeThreeFloat(a, b, c); } // Test simple operations on a float array to ensure the register allocator works // properly. public static void testArrayOperations(float[] a, int index, float value1, float value2) { a[0] = value1; a[1] = value2; assertEquals(value1 + value2, a[0] + a[1]); a[0] = 0.0f; a[1] = 0.0f; assertEquals(0.0f, a[0] + a[1]); a[index] = value1; a[index + 1] = value2; assertEquals(value1 + value2, a[0] + a[1]); } // Test simple operations on a double array to ensure the register allocator works // properly. public static void testArrayOperations(double[] a, int index, double value1, double value2) { a[0] = value1; a[1] = value2; assertEquals(value1 + value2, a[0] + a[1]); a[0] = 0.0; a[1] = 0.0; assertEquals(0.0, a[0] + a[1]); a[index] = value1; a[index + 1] = value2; assertEquals(value1 + value2, a[0] + a[1]); } public static void assertEquals(float expected, float actual) { if (expected != actual) { throw new AssertionError("Expected " + expected + " got " + actual); } } public static void assertEquals(double expected, double actual) { if (expected != actual) { throw new AssertionError("Expected " + expected + " got " + actual); } } }