/*
* 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 .
*/
// Note that $opt$ is a marker for the optimizing compiler to test
// it does compile the method.
public class SubTest {
public static void expectEquals(int expected, int result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
public static void expectEquals(long expected, long result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
public static void expectEquals(float expected, float result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
public static void expectEquals(double expected, double result) {
if (expected != result) {
throw new Error("Expected: " + expected + ", found: " + result);
}
}
public static void expectApproxEquals(float a, float b) {
float maxDelta = 0 .0001 F;
boolean aproxEquals = (a > b) ? ((a - b) < maxDelta) : ((b - a) < maxDelta);
if (!aproxEquals) {
throw new Error("Expected: " + a + ", found: " + b + ", with delta: " + maxDelta + " " + (a - b));
}
}
public static void expectApproxEquals(double a, double b) {
double maxDelta = 0 .00001 D;
boolean aproxEquals = (a > b) ? ((a - b) < maxDelta) : ((b - a) < maxDelta);
if (!aproxEquals) {
throw new Error("Expected: " + a + ", found: " + b + ", with delta: " + maxDelta + " " + (a - b));
}
}
public static void expectNaN(float a) {
if (a == a) {
throw new Error("Expected NaN: " + a);
}
}
public static void expectNaN(double a) {
if (a == a) {
throw new Error("Expected NaN: " + a);
}
}
public static void main() {
subInt();
subLong();
subFloat();
subDouble();
}
private static void subInt() {
expectEquals(2 , $opt$Sub(5 , 3 ));
expectEquals(0 , $opt$Sub(0 , 0 ));
expectEquals(-3 , $opt$Sub(0 , 3 ));
expectEquals(3 , $opt$Sub(3 , 0 ));
expectEquals(4 , $opt$Sub(1 , -3 ));
expectEquals(-9 , $opt$Sub(-12 , -3 ));
expectEquals(134217724 , $opt$Sub(134217729 , 5 )); // (2^27 + 1) - 5
}
private static void subLong() {
expectEquals(2 L, $opt$Sub(5 L, 3 L));
expectEquals(0 L, $opt$Sub(0 L, 0 L));
expectEquals(-3 L, $opt$Sub(0 L, 3 L));
expectEquals(3 L, $opt$Sub(3 L, 0 L));
expectEquals(4 L, $opt$Sub(1 L, -3 L));
expectEquals(-9 L, $opt$Sub(-12 L, -3 L));
expectEquals(134217724 L, $opt$Sub(134217729 L, 5 L)); // (2^27 + 1) - 5
expectEquals(34359738362 L, $opt$Sub(34359738369 L, 7 L)); // (2^35 + 1) - 7
}
private static void subFloat() {
expectApproxEquals(2 F, $opt$Sub(5 F, 3 F));
expectApproxEquals(0 F, $opt$Sub(0 F, 0 F));
expectApproxEquals(-3 F, $opt$Sub(0 F, 3 F));
expectApproxEquals(3 F, $opt$Sub(3 F, 0 F));
expectApproxEquals(4 F, $opt$Sub(1 F, -3 F));
expectApproxEquals(-9 F, $opt$Sub(-12 F, -3 F));
expectApproxEquals(34359738362 F, $opt$Sub(34359738369 F, 7 F)); // (2^35 + 1) - 7
expectApproxEquals(-0 .1 F, $opt$Sub(0 .1 F, 0 .2 F));
expectApproxEquals(0 .2 F, $opt$Sub(-0 .5 F, -0 .7 F));
expectNaN($opt$Sub(Float .NEGATIVE_INFINITY, Float .NEGATIVE_INFINITY));
expectNaN($opt$Sub(Float .POSITIVE_INFINITY, Float .POSITIVE_INFINITY));
expectNaN($opt$Sub(Float .NaN, 11 F));
expectNaN($opt$Sub(Float .NaN, -11 F));
expectNaN($opt$Sub(Float .NaN, Float .NEGATIVE_INFINITY));
expectNaN($opt$Sub(Float .NaN, Float .POSITIVE_INFINITY));
expectEquals(Float .NEGATIVE_INFINITY, $opt$Sub(-Float .MAX_VALUE, Float .MAX_VALUE));
expectEquals(Float .NEGATIVE_INFINITY, $opt$Sub(2 F, Float .POSITIVE_INFINITY));
expectEquals(Float .POSITIVE_INFINITY, $opt$Sub(Float .MAX_VALUE, -Float .MAX_VALUE));
expectEquals(Float .POSITIVE_INFINITY, $opt$Sub(2 F, Float .NEGATIVE_INFINITY));
expectEquals(Float .POSITIVE_INFINITY, $opt$Sub(Float .POSITIVE_INFINITY, Float .NEGATIVE_INFINITY));
expectEquals(Float .NEGATIVE_INFINITY, $opt$Sub(Float .NEGATIVE_INFINITY, Float .POSITIVE_INFINITY));
}
private static void subDouble() {
expectApproxEquals(2 D, $opt$Sub(5 D, 3 D));
expectApproxEquals(0 D, $opt$Sub(0 D, 0 D));
expectApproxEquals(-3 D, $opt$Sub(0 D, 3 D));
expectApproxEquals(3 D, $opt$Sub(3 D, 0 D));
expectApproxEquals(4 D, $opt$Sub(1 D, -3 D));
expectApproxEquals(-9 D, $opt$Sub(-12 D, -3 D));
expectApproxEquals(134217724 D, $opt$Sub(134217729 D, 5 D)); // (2^27 + 1) - 5
expectApproxEquals(34359738362 D, $opt$Sub(34359738369 D, 7 D)); // (2^35 + 1) - 7
expectApproxEquals(-0 .1 D, $opt$Sub(0 .1 D, 0 .2 D));
expectApproxEquals(0 .2 D, $opt$Sub(-0 .5 D, -0 .7 D));
expectNaN($opt$Sub(Double .NEGATIVE_INFINITY, Double .NEGATIVE_INFINITY));
expectNaN($opt$Sub(Double .POSITIVE_INFINITY, Double .POSITIVE_INFINITY));
expectNaN($opt$Sub(Double .NaN, 11 D));
expectNaN($opt$Sub(Double .NaN, -11 D));
expectNaN($opt$Sub(Double .NaN, Double .NEGATIVE_INFINITY));
expectNaN($opt$Sub(Double .NaN, Double .POSITIVE_INFINITY));
expectEquals(Double .NEGATIVE_INFINITY, $opt$Sub(-Double .MAX_VALUE, Double .MAX_VALUE));
expectEquals(Double .NEGATIVE_INFINITY, $opt$Sub(2 D, Double .POSITIVE_INFINITY));
expectEquals(Double .POSITIVE_INFINITY, $opt$Sub(Double .MAX_VALUE, -Double .MAX_VALUE));
expectEquals(Double .POSITIVE_INFINITY, $opt$Sub(2 D, Double .NEGATIVE_INFINITY));
expectEquals(Double .POSITIVE_INFINITY, $opt$Sub(Double .POSITIVE_INFINITY, Double .NEGATIVE_INFINITY));
expectEquals(Double .NEGATIVE_INFINITY, $opt$Sub(Double .NEGATIVE_INFINITY, Double .POSITIVE_INFINITY));
}
static int $opt$Sub(int a, int b) {
return a - b;
}
static long $opt$Sub(long a, long b) {
return a - b;
}
static float $opt$Sub(float a, float b) {
return a - b;
}
static double $opt$Sub(double a, double b) {
return a - b;
}
}
Messung V0.5 in Prozent C=78 H=94 G=86
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-29)
¤
*© Formatika GbR, Deutschland