1ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach/*
2ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach * Copyright (C) 2009 The Android Open Source Project
3ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach *
4ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach * Licensed under the Apache License, Version 2.0 (the "License");
5ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach * you may not use this file except in compliance with the License.
6ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach * You may obtain a copy of the License at
7ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach *
8ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach *      http://www.apache.org/licenses/LICENSE-2.0
9ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach *
10ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach * Unless required by applicable law or agreed to in writing, software
11ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach * distributed under the License is distributed on an "AS IS" BASIS,
12ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach * See the License for the specific language governing permissions and
14ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach * limitations under the License.
15ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach */
16ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach
17ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubachpackage android.content.res.cts;
18ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach
19ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubachimport android.content.res.Resources;
20ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubachimport android.test.AndroidTestCase;
21ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubachimport android.test.suitebuilder.annotation.SmallTest;
22ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubachimport android.util.TypedValue;
23c83e6c76c6d21f12521085f40b66d1e62ee9ed45Nash Lincolnimport android.content.cts.R;
24ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach
25ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubachpublic class FractionTest extends AndroidTestCase {
26ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach
27ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach    private Resources mResources;
28ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach    private TypedValue mValue;
29ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach
30ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach    @Override
31ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach    protected void setUp() throws Exception {
32ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        super.setUp();
33ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        mResources = mContext.getResources();
34ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        mValue = new TypedValue();
35ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach    }
36ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach
37ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach    @SmallTest
38ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach    public void testFractions() throws Exception {
39ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac100perc, 1, 1, 1);
40ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac1perc, 1, 1, .01f);
41ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.fracp1perc, 1, 1, .001f);
42ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.fracp01perc, 1, 1, .0001f);
43ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac0perc, 1, 1, 0);
44ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac1p1perc, 1, 1, .011f);
45ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac100p1perc, 1, 1, 1.001f);
46ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac25510perc, 1, 1, 255.1f);
47ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac25610perc, 1, 1, 256.1f);
48ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac6553510perc, 1, 1, 65535.1f);
49ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac6553610perc, 1, 1, 65536.1f);
50ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach
51ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac100perc, 100, 1, 100);
52ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac1perc, 100, 1, .01f * 100);
53ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.fracp1perc, 100, 1, .001f * 100);
54ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.fracp01perc, 100, 1, .0001f * 100);
55ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac0perc, 100, 1, 0);
56ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac1p1perc, 100, 1, .011f * 100);
57ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac100p1perc, 100, 1, 1.001f * 100);
58ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac25510perc, 100, 1, 255.1f * 100);
59ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac25610perc, 100, 1, 256.1f * 100);
60ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac6553510perc, 100, 1, 65535.1f * 100);
61ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac6553610perc, 100, 1, 65536.1f * 100);
62ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach
63ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac100pperc, 100, 2, 2);
64ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac1pperc, 100, 2, .01f * 2);
65ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.fracp1pperc, 100, 2, .001f * 2);
66ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.fracp01pperc, 100, 2, .0001f * 2);
67ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac0pperc, 100, 2, 0);
68ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac1p1pperc, 100, 2, .011f * 2);
69ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac100p1pperc, 100, 2, 1.001f * 2);
70ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac25510pperc, 100, 2, 255.1f * 2);
71ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac25610pperc, 100, 2, 256.1f * 2);
72ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac6553510pperc, 100, 2, 65535.1f * 2);
73ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        tryFraction(R.dimen.frac6553610pperc, 100, 2, 65536.1f * 2);
74ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach    }
75ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach
76ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach    private void tryFraction(final int resid, final float base, final float pbase,
77ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach            final float expected) {
78ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        mResources.getValue(resid, mValue, true);
79ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        float res = mValue.getFraction(base, pbase);
80ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        float diff = Math.abs(expected - res);
81ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        float prec = expected * 1e-4f;
82ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        if (prec < 1e-5f) {
83ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach            prec = 1e-5f;
84ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        }
85ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach
86ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach        assertFalse("Expecting value " + expected + " got " + res + ": in resource 0x"
87ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach                + Integer.toHexString(resid) + " " + mValue, diff > prec);
88ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach    }
89ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach}
90ea99ab0ba2830711b1f074f34f647e075da1c38dPhil Dubach
91