xref: /aosp_15_r20/art/test/003-omnibus-opcodes/src/Compare.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2008 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker /**
18*795d594fSAndroid Build Coastguard Worker  * Test comparison operators.
19*795d594fSAndroid Build Coastguard Worker  */
20*795d594fSAndroid Build Coastguard Worker public class Compare {
21*795d594fSAndroid Build Coastguard Worker 
22*795d594fSAndroid Build Coastguard Worker     /*
23*795d594fSAndroid Build Coastguard Worker      * Test the integer comparisons in various ways.
24*795d594fSAndroid Build Coastguard Worker      */
testIntCompare(int minus, int plus, int plus2, int zero)25*795d594fSAndroid Build Coastguard Worker     static void testIntCompare(int minus, int plus, int plus2, int zero) {
26*795d594fSAndroid Build Coastguard Worker         System.out.println("IntMath.testIntCompare");
27*795d594fSAndroid Build Coastguard Worker 
28*795d594fSAndroid Build Coastguard Worker         if (minus > plus)
29*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
30*795d594fSAndroid Build Coastguard Worker         if (minus >= plus)
31*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
32*795d594fSAndroid Build Coastguard Worker         if (plus < minus)
33*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
34*795d594fSAndroid Build Coastguard Worker         if (plus <= minus)
35*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
36*795d594fSAndroid Build Coastguard Worker         if (plus == minus)
37*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
38*795d594fSAndroid Build Coastguard Worker         if (plus != plus2)
39*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
40*795d594fSAndroid Build Coastguard Worker 
41*795d594fSAndroid Build Coastguard Worker         /* try a branch-taken */
42*795d594fSAndroid Build Coastguard Worker         if (plus != minus) {
43*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(true);
44*795d594fSAndroid Build Coastguard Worker         } else {
45*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
46*795d594fSAndroid Build Coastguard Worker         }
47*795d594fSAndroid Build Coastguard Worker 
48*795d594fSAndroid Build Coastguard Worker         if (minus > 0)
49*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
50*795d594fSAndroid Build Coastguard Worker         if (minus >= 0)
51*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
52*795d594fSAndroid Build Coastguard Worker         if (plus < 0)
53*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
54*795d594fSAndroid Build Coastguard Worker         if (plus <= 0)
55*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
56*795d594fSAndroid Build Coastguard Worker         if (plus == 0)
57*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
58*795d594fSAndroid Build Coastguard Worker         if (zero != 0)
59*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
60*795d594fSAndroid Build Coastguard Worker 
61*795d594fSAndroid Build Coastguard Worker         if (zero == 0) {
62*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(true);
63*795d594fSAndroid Build Coastguard Worker         } else {
64*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
65*795d594fSAndroid Build Coastguard Worker         }
66*795d594fSAndroid Build Coastguard Worker     }
67*795d594fSAndroid Build Coastguard Worker 
68*795d594fSAndroid Build Coastguard Worker     /*
69*795d594fSAndroid Build Coastguard Worker      * Test cmp-long.
70*795d594fSAndroid Build Coastguard Worker      *
71*795d594fSAndroid Build Coastguard Worker      * minus=-5, alsoMinus=0xFFFFFFFF00000009, plus=4, alsoPlus=8
72*795d594fSAndroid Build Coastguard Worker      */
testLongCompare(long minus, long alsoMinus, long plus, long alsoPlus)73*795d594fSAndroid Build Coastguard Worker     static void testLongCompare(long minus, long alsoMinus, long plus,
74*795d594fSAndroid Build Coastguard Worker         long alsoPlus) {
75*795d594fSAndroid Build Coastguard Worker 
76*795d594fSAndroid Build Coastguard Worker         System.out.println("IntMath.testLongCompare");
77*795d594fSAndroid Build Coastguard Worker         if (minus > plus)
78*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
79*795d594fSAndroid Build Coastguard Worker         if (plus < minus)
80*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
81*795d594fSAndroid Build Coastguard Worker         if (plus == minus)
82*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
83*795d594fSAndroid Build Coastguard Worker 
84*795d594fSAndroid Build Coastguard Worker         if (plus >= plus+1)
85*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
86*795d594fSAndroid Build Coastguard Worker         if (minus >= minus+1)
87*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
88*795d594fSAndroid Build Coastguard Worker 
89*795d594fSAndroid Build Coastguard Worker         /* try a branch-taken */
90*795d594fSAndroid Build Coastguard Worker         if (plus != minus) {
91*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(true);
92*795d594fSAndroid Build Coastguard Worker         } else {
93*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
94*795d594fSAndroid Build Coastguard Worker         }
95*795d594fSAndroid Build Coastguard Worker 
96*795d594fSAndroid Build Coastguard Worker         /* compare when high words are equal but low words differ */
97*795d594fSAndroid Build Coastguard Worker         if (plus > alsoPlus)
98*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
99*795d594fSAndroid Build Coastguard Worker         if (alsoPlus < plus)
100*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
101*795d594fSAndroid Build Coastguard Worker         if (alsoPlus == plus)
102*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
103*795d594fSAndroid Build Coastguard Worker 
104*795d594fSAndroid Build Coastguard Worker         /* high words are equal, low words have apparently different signs */
105*795d594fSAndroid Build Coastguard Worker         if (minus < alsoMinus)      // bug!
106*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
107*795d594fSAndroid Build Coastguard Worker         if (alsoMinus > minus)
108*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
109*795d594fSAndroid Build Coastguard Worker         if (alsoMinus == minus)
110*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
111*795d594fSAndroid Build Coastguard Worker     }
112*795d594fSAndroid Build Coastguard Worker 
113*795d594fSAndroid Build Coastguard Worker     /*
114*795d594fSAndroid Build Coastguard Worker      * Test cmpl-float and cmpg-float.
115*795d594fSAndroid Build Coastguard Worker      */
testFloatCompare(float minus, float plus, float plus2, float nan)116*795d594fSAndroid Build Coastguard Worker     static void testFloatCompare(float minus, float plus, float plus2,
117*795d594fSAndroid Build Coastguard Worker         float nan) {
118*795d594fSAndroid Build Coastguard Worker 
119*795d594fSAndroid Build Coastguard Worker         System.out.println("IntMath.testFloatCompare");
120*795d594fSAndroid Build Coastguard Worker         if (minus > plus)
121*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
122*795d594fSAndroid Build Coastguard Worker         if (plus < minus)
123*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
124*795d594fSAndroid Build Coastguard Worker         if (plus == minus)
125*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
126*795d594fSAndroid Build Coastguard Worker         if (plus != plus2)
127*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
128*795d594fSAndroid Build Coastguard Worker 
129*795d594fSAndroid Build Coastguard Worker         if (plus <= nan)
130*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
131*795d594fSAndroid Build Coastguard Worker         if (plus >= nan)
132*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
133*795d594fSAndroid Build Coastguard Worker         if (minus <= nan)
134*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
135*795d594fSAndroid Build Coastguard Worker         if (minus >= nan)
136*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
137*795d594fSAndroid Build Coastguard Worker         if (nan >= plus)
138*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
139*795d594fSAndroid Build Coastguard Worker         if (nan <= plus)
140*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
141*795d594fSAndroid Build Coastguard Worker 
142*795d594fSAndroid Build Coastguard Worker         if (nan == nan)
143*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
144*795d594fSAndroid Build Coastguard Worker     }
145*795d594fSAndroid Build Coastguard Worker 
testDoubleCompare(double minus, double plus, double plus2, double nan)146*795d594fSAndroid Build Coastguard Worker     static void testDoubleCompare(double minus, double plus, double plus2,
147*795d594fSAndroid Build Coastguard Worker         double nan) {
148*795d594fSAndroid Build Coastguard Worker 
149*795d594fSAndroid Build Coastguard Worker         System.out.println("IntMath.testDoubleCompare");
150*795d594fSAndroid Build Coastguard Worker         if (minus > plus)
151*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
152*795d594fSAndroid Build Coastguard Worker         if (plus < minus)
153*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
154*795d594fSAndroid Build Coastguard Worker         if (plus == minus)
155*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
156*795d594fSAndroid Build Coastguard Worker         if (plus != plus2)
157*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
158*795d594fSAndroid Build Coastguard Worker 
159*795d594fSAndroid Build Coastguard Worker         if (plus <= nan)
160*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
161*795d594fSAndroid Build Coastguard Worker         if (plus >= nan)
162*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
163*795d594fSAndroid Build Coastguard Worker         if (minus <= nan)
164*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
165*795d594fSAndroid Build Coastguard Worker         if (minus >= nan)
166*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
167*795d594fSAndroid Build Coastguard Worker         if (nan >= plus)
168*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
169*795d594fSAndroid Build Coastguard Worker         if (nan <= plus)
170*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
171*795d594fSAndroid Build Coastguard Worker 
172*795d594fSAndroid Build Coastguard Worker         if (nan == nan)
173*795d594fSAndroid Build Coastguard Worker             Main.assertTrue(false);
174*795d594fSAndroid Build Coastguard Worker     }
175*795d594fSAndroid Build Coastguard Worker 
run()176*795d594fSAndroid Build Coastguard Worker     public static void run() {
177*795d594fSAndroid Build Coastguard Worker         testIntCompare(-5, 4, 4, 0);
178*795d594fSAndroid Build Coastguard Worker         testLongCompare(-5L, -4294967287L, 4L, 8L);
179*795d594fSAndroid Build Coastguard Worker 
180*795d594fSAndroid Build Coastguard Worker         testFloatCompare(-5.0f, 4.0f, 4.0f, (1.0f/0.0f) / (1.0f/0.0f));
181*795d594fSAndroid Build Coastguard Worker         testDoubleCompare(-5.0, 4.0, 4.0, (1.0/0.0) / (1.0/0.0));
182*795d594fSAndroid Build Coastguard Worker     }
183*795d594fSAndroid Build Coastguard Worker }
184