/*
* Copyright (C) 2008 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.
*/
/**
* Test comparison operators.
*/
public class Compare {
/*
* Test the integer comparisons in various ways.
*/
static void testIntCompare(int minus, int plus, int plus2, int zero) {
System.out.println("IntMath.testIntCompare");
if (minus > plus)
Main.assertTrue(false);
if (minus >= plus)
Main.assertTrue(false);
if (plus < minus)
Main.assertTrue(false);
if (plus <= minus)
Main.assertTrue(false);
if (plus == minus)
Main.assertTrue(false);
if (plus != plus2)
Main.assertTrue(false);
/* try a branch-taken */
if (plus != minus) {
Main.assertTrue(true);
} else {
Main.assertTrue(false);
}
if (minus > 0)
Main.assertTrue(false);
if (minus >= 0)
Main.assertTrue(false);
if (plus < 0)
Main.assertTrue(false);
if (plus <= 0)
Main.assertTrue(false);
if (plus == 0)
Main.assertTrue(false);
if (zero != 0)
Main.assertTrue(false);
if (zero == 0) {
Main.assertTrue(true);
} else {
Main.assertTrue(false);
}
}
/*
* Test cmp-long.
*
* minus=-5, alsoMinus=0xFFFFFFFF00000009, plus=4, alsoPlus=8
*/
static void testLongCompare(long minus, long alsoMinus, long plus,
long alsoPlus) {
System.out.println("IntMath.testLongCompare");
if (minus > plus)
Main.assertTrue(false);
if (plus < minus)
Main.assertTrue(false);
if (plus == minus)
Main.assertTrue(false);
if (plus >= plus+1)
Main.assertTrue(false);
if (minus >= minus+1)
Main.assertTrue(false);
/* try a branch-taken */
if (plus != minus) {
Main.assertTrue(true);
} else {
Main.assertTrue(false);
}
/* compare when high words are equal but low words differ */
if (plus > alsoPlus)
Main.assertTrue(false);
if (alsoPlus < plus)
Main.assertTrue(false);
if (alsoPlus == plus)
Main.assertTrue(false);
/* high words are equal, low words have apparently different signs */
if (minus < alsoMinus) // bug!
Main.assertTrue(false);
if (alsoMinus > minus)
Main.assertTrue(false);
if (alsoMinus == minus)
Main.assertTrue(false);
}
/*
* Test cmpl-float and cmpg-float.
*/
static void testFloatCompare(float minus, float plus, float plus2,
float nan) {
System.out.println("IntMath.testFloatCompare");
if (minus > plus)
Main.assertTrue(false);
if (plus < minus)
Main.assertTrue(false);
if (plus == minus)
Main.assertTrue(false);
if (plus != plus2)
Main.assertTrue(false);
if (plus <= nan)
Main.assertTrue(false);
if (plus >= nan)
Main.assertTrue(false);
if (minus <= nan)
Main.assertTrue(false);
if (minus >= nan)
Main.assertTrue(false);
if (nan >= plus)
Main.assertTrue(false);
if (nan <= plus)
Main.assertTrue(false);
if (nan == nan)
Main.assertTrue(false);
}
static void testDoubleCompare(double minus, double plus, double plus2,
double nan) {
System.out.println("IntMath.testDoubleCompare");
if (minus > plus)
Main.assertTrue(false);
if (plus < minus)
Main.assertTrue(false);
if (plus == minus)
Main.assertTrue(false);
if (plus != plus2)
Main.assertTrue(false);
if (plus <= nan)
Main.assertTrue(false);
if (plus >= nan)
Main.assertTrue(false);
if (minus <= nan)
Main.assertTrue(false);
if (minus >= nan)
Main.assertTrue(false);
if (nan >= plus)
Main.assertTrue(false);
if (nan <= plus)
Main.assertTrue(false);
if (nan == nan)
Main.assertTrue(false);
}
public static void run() {
testIntCompare(-5, 4, 4, 0);
testLongCompare(-5L, -4294967287L, 4L, 8L);
testFloatCompare(-5.0f, 4.0f, 4.0f, (1.0f/0.0f) / (1.0f/0.0f));
testDoubleCompare(-5.0, 4.0, 4.0, (1.0/0.0) / (1.0/0.0));
}
}