/*
* 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 RemTest {
public static void main() {
remInt();
remLong();
}
private static void remInt() {
expectEquals(2 , $opt$RemConst(6 ));
expectEquals(2 , $opt$Rem(6 , 4 ));
expectEquals(2 , $opt$Rem(6 , -4 ));
expectEquals(0 , $opt$Rem(6 , 3 ));
expectEquals(0 , $opt$Rem(6 , -3 ));
expectEquals(0 , $opt$Rem(6 , 1 ));
expectEquals(0 , $opt$Rem(6 , -1 ));
expectEquals(-1 , $opt$Rem(-7 , 3 ));
expectEquals(-1 , $opt$Rem(-7 , -3 ));
expectEquals(0 , $opt$Rem(6 , 6 ));
expectEquals(0 , $opt$Rem(-6 , -6 ));
expectEquals(7 , $opt$Rem(7 , 9 ));
expectEquals(7 , $opt$Rem(7 , -9 ));
expectEquals(-7 , $opt$Rem(-7 , 9 ));
expectEquals(-7 , $opt$Rem(-7 , -9 ));
expectEquals(0 , $opt$Rem(Integer.MAX_VALUE, 1 ));
expectEquals(0 , $opt$Rem(Integer.MAX_VALUE, -1 ));
expectEquals(0 , $opt$Rem(Integer.MIN_VALUE, 1 ));
expectEquals(0 , $opt$Rem(Integer.MIN_VALUE, -1 )); // no overflow
expectEquals(-1 , $opt$Rem(Integer.MIN_VALUE, Integer.MAX_VALUE));
expectEquals(Integer.MAX_VALUE, $opt$Rem(Integer.MAX_VALUE, Integer.MIN_VALUE));
expectEquals(0 , $opt$Rem(0 , 7 ));
expectEquals(0 , $opt$Rem(0 , Integer.MAX_VALUE));
expectEquals(0 , $opt$Rem(0 , Integer.MIN_VALUE));
expectDivisionByZero(0 );
expectDivisionByZero(1 );
expectDivisionByZero(5 );
expectDivisionByZero(Integer.MAX_VALUE);
expectDivisionByZero(Integer.MIN_VALUE);
}
private static void remLong() {
expectEquals(2 L, $opt$RemConst(6 L));
expectEquals(2 L, $opt$Rem(6 L, 4 L));
expectEquals(2 L, $opt$Rem(6 L, -4 L));
expectEquals(0 L, $opt$Rem(6 L, 3 L));
expectEquals(0 L, $opt$Rem(6 L, -3 L));
expectEquals(0 L, $opt$Rem(6 L, 1 L));
expectEquals(0 L, $opt$Rem(6 L, -1 L));
expectEquals(-1 L, $opt$Rem(-7 L, 3 L));
expectEquals(-1 L, $opt$Rem(-7 L, -3 L));
expectEquals(0 L, $opt$Rem(6 L, 6 L));
expectEquals(0 L, $opt$Rem(-6 L, -6 L));
expectEquals(7 L, $opt$Rem(7 L, 9 L));
expectEquals(7 L, $opt$Rem(7 L, -9 L));
expectEquals(-7 L, $opt$Rem(-7 L, 9 L));
expectEquals(-7 L, $opt$Rem(-7 L, -9 L));
expectEquals(0 L, $opt$Rem(Long .MAX_VALUE, 1 L));
expectEquals(0 L, $opt$Rem(Long .MAX_VALUE, -1 L));
expectEquals(0 L, $opt$Rem(Long .MIN_VALUE, 1 L));
expectEquals(0 L, $opt$Rem(Long .MIN_VALUE, -1 L)); // no overflow
expectEquals(-1 L, $opt$Rem(Long .MIN_VALUE, Long .MAX_VALUE));
expectEquals(Long .MAX_VALUE, $opt$Rem(Long .MAX_VALUE, Long .MIN_VALUE));
expectEquals(0 L, $opt$Rem(0 L, 7 L));
expectEquals(0 L, $opt$Rem(0 L, Long .MAX_VALUE));
expectEquals(0 L, $opt$Rem(0 L, Long .MIN_VALUE));
expectDivisionByZero(0 L);
expectDivisionByZero(1 L);
expectDivisionByZero(5 L);
expectDivisionByZero(Long .MAX_VALUE);
expectDivisionByZero(Long .MIN_VALUE);
expectEquals(0 , $noinline$RemLoaded1(0 ));
expectEquals(0 , $noinline$RemLoaded1(1 ));
expectEquals(0 , $noinline$RemLoaded1(-1 ));
expectEquals(0 , $noinline$RemLoaded1(12345 ));
expectEquals(0 , $noinline$RemLoaded1(Integer.MAX_VALUE));
expectEquals(0 , $noinline$RemLoaded1(Integer.MIN_VALUE));
expectEquals(0 , $noinline$RemLoadedN1(0 ));
expectEquals(0 , $noinline$RemLoadedN1(1 ));
expectEquals(0 , $noinline$RemLoadedN1(-1 ));
expectEquals(0 , $noinline$RemLoadedN1(12345 ));
expectEquals(0 , $noinline$RemLoadedN1(Integer.MAX_VALUE));
expectEquals(0 , $noinline$RemLoadedN1(Integer.MIN_VALUE));
expectEquals(0 L, $noinline$RemLoaded1(0 L));
expectEquals(0 L, $noinline$RemLoaded1(1 L));
expectEquals(0 L, $noinline$RemLoaded1(-1 L));
expectEquals(0 L, $noinline$RemLoaded1(12345 L));
expectEquals(0 L, $noinline$RemLoaded1(Long .MAX_VALUE));
expectEquals(0 L, $noinline$RemLoaded1(Long .MIN_VALUE));
expectEquals(0 L, $noinline$RemLoadedN1(0 L));
expectEquals(0 L, $noinline$RemLoadedN1(1 L));
expectEquals(0 L, $noinline$RemLoadedN1(-1 L));
expectEquals(0 L, $noinline$RemLoadedN1(12345 L));
expectEquals(0 L, $noinline$RemLoadedN1(Long .MAX_VALUE));
expectEquals(0 L, $noinline$RemLoadedN1(Long .MIN_VALUE));
}
static int $opt$Rem(int a, int b) {
return a % b;
}
static int $opt$RemZero(int a) {
return a % 0 ;
}
static int $noinline$RemLoaded1(int a) {
int [] v = {25 , 1 };
return a % v[1 ];
}
static int $noinline$RemLoadedN1(int a) {
int [] v = {25 , -1 };
return a % v[1 ];
}
static long $noinline$RemLoaded1(long a) {
long [] v = {25 , 1 };
return a % v[1 ];
}
static long $noinline$RemLoadedN1(long a) {
long [] v = {25 , -1 };
return a % v[1 ];
}
// Modulo by literals != 0 should not generate checks.
static int $opt$RemConst(int a) {
return a % 4 ;
}
static long $opt$RemConst(long a) {
return a % 4 L;
}
static long $opt$Rem(long a, long b) {
return a % b;
}
static long $opt$RemZero(long a) {
return a % 0 L;
}
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 expectDivisionByZero(int value) {
try {
$opt$Rem(value, 0 );
throw new Error("Expected RuntimeException when modulo by 0" );
} catch (java.lang.RuntimeException e) {
}
try {
$opt$RemZero(value);
throw new Error("Expected RuntimeException when modulo by 0" );
} catch (java.lang.RuntimeException e) {
}
}
public static void expectDivisionByZero(long value) {
try {
$opt$Rem(value, 0 L);
throw new Error("Expected RuntimeException when modulo by 0" );
} catch (java.lang.RuntimeException e) {
}
try {
$opt$RemZero(value);
throw new Error("Expected RuntimeException when modulo by 0" );
} catch (java.lang.RuntimeException e) {
}
}
}
Messung V0.5 in Prozent C=86 H=96 G=90
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-29)
¤
*© Formatika GbR, Deutschland