xref: /aosp_15_r20/art/test/436-rem-float/src/Main.java (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2014 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 public class Main {
18*795d594fSAndroid Build Coastguard Worker 
main(String[] args)19*795d594fSAndroid Build Coastguard Worker   public static void main(String[] args) {
20*795d594fSAndroid Build Coastguard Worker     remFloat();
21*795d594fSAndroid Build Coastguard Worker     remDouble();
22*795d594fSAndroid Build Coastguard Worker   }
23*795d594fSAndroid Build Coastguard Worker 
remFloat()24*795d594fSAndroid Build Coastguard Worker   private static void remFloat() {
25*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(1.98F, $opt$Rem(1.98F, 2F));
26*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(2F, 0.5F));
27*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.09999F, $opt$Rem(1.0F, 0.1F));
28*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(1.9F, $opt$Rem(6.5F, 2.3F));
29*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.48F, $opt$Rem(1.98F, 1.5F));
30*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.9999F, $opt$Rem(0.9999F, 1.222F));
31*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.9999F, $opt$Rem(0.9999F, 1.0001F));
32*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1.98F, $opt$Rem(-1.98F, 2F));
33*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0F, $opt$Rem(-2F, 0.5F));
34*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.09999F, $opt$Rem(-1.0F, 0.1F));
35*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1.9F, $opt$Rem(-6.5F, 2.3F));
36*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.48F, $opt$Rem(-1.98F, 1.5F));
37*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.9999F, $opt$Rem(-0.9999F, 1.222F));
38*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.9999F, $opt$Rem(-0.9999F, 1.0001F));
39*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(1.98F, $opt$Rem(1.98F, -2F));
40*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(2F, -0.5F));
41*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.09999F, $opt$Rem(1.0F, -0.1F));
42*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(1.9F, $opt$Rem(6.5F, -2.3F));
43*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.48F, $opt$Rem(1.98F, -1.5F));
44*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.9999F, $opt$Rem(0.9999F, -1.222F));
45*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.9999F, $opt$Rem(0.9999F, -1.0001F));
46*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1.98F, $opt$Rem(-1.98F, -2F));
47*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0F, $opt$Rem(-2F, -0.5F));
48*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.09999F, $opt$Rem(-1.0F, -0.1F));
49*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1.9F, $opt$Rem(-6.5F, -2.3F));
50*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.48F, $opt$Rem(-1.98F, -1.5F));
51*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.9999F, $opt$Rem(-0.9999F, -1.222F));
52*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.9999F, $opt$Rem(-0.9999F, -1.0001F));
53*795d594fSAndroid Build Coastguard Worker 
54*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(1.68267e-18F, $opt$Rem(61615.2F, -2.48699e-17F));
55*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-8.63819e-09F, $opt$Rem(-1.73479e+14F, 3.11154e-08F));
56*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(1.10911e-12F, $opt$Rem(338122F, 4.57572e-12F));
57*795d594fSAndroid Build Coastguard Worker 
58*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(2F, $opt$RemConst(6F));
59*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(2F, $opt$Rem(5.1F, 3.1F));
60*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(2.1F, $opt$Rem(5.1F, 3F));
61*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-2F, $opt$Rem(-5.1F, 3.1F));
62*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-2.1F, $opt$Rem(-5.1F, -3F));
63*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(2F, $opt$Rem(6F, 4F));
64*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(2F, $opt$Rem(6F, -4F));
65*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(6F, 3F));
66*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(6F, -3F));
67*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(6F, 1F));
68*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(6F, -1F));
69*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1F, $opt$Rem(-7F, 3F));
70*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1F, $opt$Rem(-7F, -3F));
71*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(6F, 6F));
72*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(-6F, -6F));
73*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(7F, $opt$Rem(7F, 9F));
74*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(7F, $opt$Rem(7F, -9F));
75*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-7F, $opt$Rem(-7F, 9F));
76*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-7F, $opt$Rem(-7F, -9F));
77*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(Float.MAX_VALUE, 1F));
78*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(Float.MAX_VALUE, -1F));
79*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(Float.MIN_VALUE, 1F));
80*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(Float.MIN_VALUE, -1F));
81*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(0F, 7F));
82*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(0F, Float.MAX_VALUE));
83*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(0F, Float.MIN_VALUE));
84*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(0F, Float.POSITIVE_INFINITY));
85*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(0F, Float.NEGATIVE_INFINITY));
86*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(4F, $opt$Rem(4F, Float.POSITIVE_INFINITY));
87*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(4F, $opt$Rem(4F, Float.NEGATIVE_INFINITY));
88*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-4F, $opt$Rem(-4F, Float.POSITIVE_INFINITY));
89*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-4F, $opt$Rem(-4F, Float.NEGATIVE_INFINITY));
90*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(Float.MIN_NORMAL, Float.MIN_VALUE));
91*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(Float.MIN_NORMAL, Float.MIN_NORMAL));
92*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(Float.MIN_VALUE, Float.MIN_VALUE));
93*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(Float.MAX_VALUE, Float.MIN_VALUE));
94*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(Float.MAX_VALUE, Float.MAX_VALUE));
95*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0F, $opt$Rem(Float.MAX_VALUE, Float.MIN_NORMAL));
96*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Float.MIN_NORMAL, $opt$Rem(Float.MIN_NORMAL, Float.MAX_VALUE));
97*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Float.MIN_NORMAL, $opt$Rem(Float.MIN_NORMAL, Float.NEGATIVE_INFINITY));
98*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Float.MIN_NORMAL, $opt$Rem(Float.MIN_NORMAL, Float.POSITIVE_INFINITY));
99*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Float.MIN_VALUE, $opt$Rem(Float.MIN_VALUE, Float.MAX_VALUE));
100*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Float.MIN_VALUE, $opt$Rem(Float.MIN_VALUE, Float.MIN_NORMAL));
101*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Float.MIN_VALUE, $opt$Rem(Float.MIN_VALUE, Float.NEGATIVE_INFINITY));
102*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Float.MIN_VALUE, $opt$Rem(Float.MIN_VALUE, Float.POSITIVE_INFINITY));
103*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Float.MAX_VALUE, $opt$Rem(Float.MAX_VALUE, Float.NEGATIVE_INFINITY));
104*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Float.MAX_VALUE, $opt$Rem(Float.MAX_VALUE, Float.POSITIVE_INFINITY));
105*795d594fSAndroid Build Coastguard Worker 
106*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Float.NaN, 3F));
107*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(3F, Float.NaN));
108*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(3F, 0F));
109*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(1F, 0F));
110*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(-1F, 0F));
111*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Float.NEGATIVE_INFINITY, Float.MIN_VALUE));
112*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Float.NEGATIVE_INFINITY, Float.MAX_VALUE));
113*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Float.NEGATIVE_INFINITY, Float.MIN_NORMAL));
114*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY));
115*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY));
116*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Float.POSITIVE_INFINITY, Float.MIN_VALUE));
117*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Float.POSITIVE_INFINITY, Float.MAX_VALUE));
118*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Float.POSITIVE_INFINITY, Float.MIN_NORMAL));
119*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY));
120*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY));
121*795d594fSAndroid Build Coastguard Worker   }
122*795d594fSAndroid Build Coastguard Worker 
remDouble()123*795d594fSAndroid Build Coastguard Worker   private static void remDouble() {
124*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(1.98D, $opt$Rem(1.98D, 2D));
125*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(2D, 0.5D));
126*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.09999D, $opt$Rem(1.0D, 0.1D));
127*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(1.9D, $opt$Rem(6.5D, 2.3D));
128*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.48D, $opt$Rem(1.98D, 1.5D));
129*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.9999D, $opt$Rem(0.9999D, 1.222D));
130*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.9999D, $opt$Rem(0.9999D, 1.0001D));
131*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1.98D, $opt$Rem(-1.98D, 2D));
132*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0D, $opt$Rem(-2D, 0.5D));
133*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.09999D, $opt$Rem(-1.0D, 0.1D));
134*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1.9D, $opt$Rem(-6.5D, 2.3D));
135*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.48D, $opt$Rem(-1.98D, 1.5D));
136*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.9999D, $opt$Rem(-0.9999D, 1.222D));
137*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.9999D, $opt$Rem(-0.9999D, 1.0001D));
138*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(1.98D, $opt$Rem(1.98D, -2D));
139*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(2D, -0.5D));
140*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.09999D, $opt$Rem(1.0D, -0.1D));
141*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(1.9D, $opt$Rem(6.5D, -2.3D));
142*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.48D, $opt$Rem(1.98D, -1.5D));
143*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.9999D, $opt$Rem(0.9999D, -1.222D));
144*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0.9999D, $opt$Rem(0.9999D, -1.0001D));
145*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1.98D, $opt$Rem(-1.98D, -2D));
146*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0D, $opt$Rem(-2D, -0.5D));
147*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.09999D, $opt$Rem(-1.0D, -0.1D));
148*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1.9D, $opt$Rem(-6.5D, -2.3D));
149*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.48D, $opt$Rem(-1.98D, -1.5D));
150*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.9999D, $opt$Rem(-0.9999D, -1.222D));
151*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-0.9999D, $opt$Rem(-0.9999D, -1.0001D));
152*795d594fSAndroid Build Coastguard Worker 
153*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(2D, $opt$RemConst(6D));
154*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(2D, $opt$Rem(5.1D, 3.1D));
155*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(2.1D, $opt$Rem(5.1D, 3D));
156*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-2D, $opt$Rem(-5.1D, 3.1D));
157*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-2.1D, $opt$Rem(-5.1D, -3D));
158*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(2D, $opt$Rem(6D, 4D));
159*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(2D, $opt$Rem(6D, -4D));
160*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(6D, 3D));
161*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(6D, -3D));
162*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(6D, 1D));
163*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(6D, -1D));
164*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1D, $opt$Rem(-7D, 3D));
165*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-1D, $opt$Rem(-7D, -3D));
166*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(6D, 6D));
167*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(-6D, -6D));
168*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(7D, $opt$Rem(7D, 9D));
169*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(7D, $opt$Rem(7D, -9D));
170*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-7D, $opt$Rem(-7D, 9D));
171*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-7D, $opt$Rem(-7D, -9D));
172*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(Double.MAX_VALUE, 1D));
173*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(Double.MAX_VALUE, -1D));
174*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(Double.MIN_VALUE, 1D));
175*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(Double.MIN_VALUE, -1D));
176*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(0D, 7D));
177*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(0D, Double.MAX_VALUE));
178*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(0D, Double.MIN_VALUE));
179*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(0D, Double.POSITIVE_INFINITY));
180*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(0D, Double.NEGATIVE_INFINITY));
181*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(4D, $opt$Rem(4D, Double.POSITIVE_INFINITY));
182*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(4D, $opt$Rem(4D, Double.NEGATIVE_INFINITY));
183*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-4D, $opt$Rem(-4D, Double.POSITIVE_INFINITY));
184*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(-4D, $opt$Rem(-4D, Double.NEGATIVE_INFINITY));
185*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(Double.MIN_NORMAL, Double.MIN_VALUE));
186*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(Double.MIN_NORMAL, Double.MIN_NORMAL));
187*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(Double.MIN_VALUE, Double.MIN_VALUE));
188*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(Double.MAX_VALUE, Double.MIN_VALUE));
189*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(Double.MAX_VALUE, Double.MAX_VALUE));
190*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(0D, $opt$Rem(Double.MAX_VALUE, Double.MIN_NORMAL));
191*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Double.MIN_NORMAL, $opt$Rem(Double.MIN_NORMAL, Double.MAX_VALUE));
192*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Double.MIN_NORMAL, $opt$Rem(Double.MIN_NORMAL, Double.NEGATIVE_INFINITY));
193*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Double.MIN_NORMAL, $opt$Rem(Double.MIN_NORMAL, Double.POSITIVE_INFINITY));
194*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Double.MIN_VALUE, $opt$Rem(Double.MIN_VALUE, Double.MAX_VALUE));
195*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Double.MIN_VALUE, $opt$Rem(Double.MIN_VALUE, Double.MIN_NORMAL));
196*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Double.MIN_VALUE, $opt$Rem(Double.MIN_VALUE, Double.NEGATIVE_INFINITY));
197*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Double.MIN_VALUE, $opt$Rem(Double.MIN_VALUE, Double.POSITIVE_INFINITY));
198*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Double.MAX_VALUE, $opt$Rem(Double.MAX_VALUE, Double.NEGATIVE_INFINITY));
199*795d594fSAndroid Build Coastguard Worker     expectApproxEquals(Double.MAX_VALUE, $opt$Rem(Double.MAX_VALUE, Double.POSITIVE_INFINITY));
200*795d594fSAndroid Build Coastguard Worker 
201*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Double.NaN, 3D));
202*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(3D, Double.NaN));
203*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(3D, 0D));
204*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(1D, 0D));
205*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(-1D, 0D));
206*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Double.NEGATIVE_INFINITY, Double.MIN_VALUE));
207*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Double.NEGATIVE_INFINITY, Double.MAX_VALUE));
208*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Double.NEGATIVE_INFINITY, Double.MIN_NORMAL));
209*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY));
210*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY));
211*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Double.POSITIVE_INFINITY, Double.MIN_VALUE));
212*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Double.POSITIVE_INFINITY, Double.MAX_VALUE));
213*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Double.POSITIVE_INFINITY, Double.MIN_NORMAL));
214*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY));
215*795d594fSAndroid Build Coastguard Worker     expectNaN($opt$Rem(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY));
216*795d594fSAndroid Build Coastguard Worker   }
217*795d594fSAndroid Build Coastguard Worker 
$opt$Rem(float a, float b)218*795d594fSAndroid Build Coastguard Worker   static float $opt$Rem(float a, float b) {
219*795d594fSAndroid Build Coastguard Worker     return a % b;
220*795d594fSAndroid Build Coastguard Worker   }
221*795d594fSAndroid Build Coastguard Worker 
$opt$RemConst(float a)222*795d594fSAndroid Build Coastguard Worker  static float $opt$RemConst(float a) {
223*795d594fSAndroid Build Coastguard Worker     return a % 4F;
224*795d594fSAndroid Build Coastguard Worker   }
225*795d594fSAndroid Build Coastguard Worker 
$opt$Rem(double a, double b)226*795d594fSAndroid Build Coastguard Worker   static double $opt$Rem(double a, double b) {
227*795d594fSAndroid Build Coastguard Worker     return a % b;
228*795d594fSAndroid Build Coastguard Worker   }
229*795d594fSAndroid Build Coastguard Worker 
$opt$RemConst(double a)230*795d594fSAndroid Build Coastguard Worker   static double $opt$RemConst(double a) {
231*795d594fSAndroid Build Coastguard Worker     return a % 4D;
232*795d594fSAndroid Build Coastguard Worker   }
233*795d594fSAndroid Build Coastguard Worker 
expectApproxEquals(float a, float b)234*795d594fSAndroid Build Coastguard Worker   public static void expectApproxEquals(float a, float b) {
235*795d594fSAndroid Build Coastguard Worker     float maxDelta = 0.00001F;
236*795d594fSAndroid Build Coastguard Worker     boolean aproxEquals = (a > b) ? ((a - b) < maxDelta) : ((b - a) < maxDelta);
237*795d594fSAndroid Build Coastguard Worker     if (!aproxEquals) {
238*795d594fSAndroid Build Coastguard Worker       throw new Error("Expected: " + a + ", found: " + b
239*795d594fSAndroid Build Coastguard Worker           + ", with delta: " + maxDelta + " " + (a - b));
240*795d594fSAndroid Build Coastguard Worker     }
241*795d594fSAndroid Build Coastguard Worker   }
242*795d594fSAndroid Build Coastguard Worker 
expectApproxEquals(double a, double b)243*795d594fSAndroid Build Coastguard Worker   public static void expectApproxEquals(double a, double b) {
244*795d594fSAndroid Build Coastguard Worker     double maxDelta = 0.00001D;
245*795d594fSAndroid Build Coastguard Worker     boolean aproxEquals = (a > b) ? ((a - b) < maxDelta) : ((b - a) < maxDelta);
246*795d594fSAndroid Build Coastguard Worker     if (!aproxEquals) {
247*795d594fSAndroid Build Coastguard Worker       throw new Error("Expected: " + a + ", found: "
248*795d594fSAndroid Build Coastguard Worker           + b + ", with delta: " + maxDelta + " " + (a - b));
249*795d594fSAndroid Build Coastguard Worker     }
250*795d594fSAndroid Build Coastguard Worker   }
251*795d594fSAndroid Build Coastguard Worker 
expectNaN(float a)252*795d594fSAndroid Build Coastguard Worker   public static void expectNaN(float a) {
253*795d594fSAndroid Build Coastguard Worker     if (a == a) {
254*795d594fSAndroid Build Coastguard Worker       throw new Error("Expected NaN: " + a);
255*795d594fSAndroid Build Coastguard Worker     }
256*795d594fSAndroid Build Coastguard Worker   }
257*795d594fSAndroid Build Coastguard Worker 
expectNaN(double a)258*795d594fSAndroid Build Coastguard Worker   public static void expectNaN(double a) {
259*795d594fSAndroid Build Coastguard Worker     if (a == a) {
260*795d594fSAndroid Build Coastguard Worker       throw new Error("Expected NaN: " + a);
261*795d594fSAndroid Build Coastguard Worker     }
262*795d594fSAndroid Build Coastguard Worker   }
263*795d594fSAndroid Build Coastguard Worker 
264*795d594fSAndroid Build Coastguard Worker }
265