1f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin/*
2f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Copyright (C) 2010 The Android Open Source Project
3f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin *
4f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Licensed under the Apache License, Version 2.0 (the "License");
5f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * you may not use this file except in compliance with the License.
6f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * You may obtain a copy of the License at
7f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin *
8f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin *      http://www.apache.org/licenses/LICENSE-2.0
9f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin *
10f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * Unless required by applicable law or agreed to in writing, software
11f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * distributed under the License is distributed on an "AS IS" BASIS,
12f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * See the License for the specific language governing permissions and
14f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin * limitations under the License.
15f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin */
16f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
17f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpackage com.android.gallery3d.common;
18f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
19f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.test.AndroidTestCase;
20f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.test.suitebuilder.annotation.SmallTest;
21f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linimport android.util.Log;
22f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
23f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Linpublic class UtilsTest extends AndroidTestCase {
24f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final String TAG = "UtilsTest";
25f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
26f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    private static final int [] testData = new int [] {
27f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        /* outWidth, outHeight, minSideLength, maxNumOfPixels, sample size */
28f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        1, 1, BitmapUtils.UNCONSTRAINED, BitmapUtils.UNCONSTRAINED, 1,
29f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        1, 1, 1, 1, 1,
30f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 100, 10000, 1,
31f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 100, 2500, 2,
32f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        99, 66, 33, 10000, 2,
33f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        66, 99, 33, 10000, 2,
34f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        99, 66, 34, 10000, 1,
35f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        99, 66, 22, 10000, 4,
36f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        99, 66, 16, 10000, 4,
37f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
38f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        10000, 10000, 20000, 1000000, 16,
39f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
40f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 100, 10000, 1, // 1
41f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 50, 10000, 2,  // 2
42f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 30, 10000, 4,  // 3->4
43f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 22, 10000, 4,  // 4
44f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 20, 10000, 8,  // 5->8
45f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 11, 10000, 16, // 9->16
46f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 5,  10000, 24, // 20->24
47f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 2,  10000, 56, // 50->56
48f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
49f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 100, 10000 - 1, 2,                  // a bit less than 1
50f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 100, 10000 / (2 * 2) - 1, 4,        // a bit less than 2
51f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 100, 10000 / (3 * 3) - 1, 4,        // a bit less than 3
52f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 100, 10000 / (4 * 4) - 1, 8,        // a bit less than 4
53f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 100, 10000 / (8 * 8) - 1, 16,       // a bit less than 8
54f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 100, 10000 / (16 * 16) - 1, 24,     // a bit less than 16
55f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 100, 10000 / (24 * 24) - 1, 32,     // a bit less than 24
56f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        100, 100, 100, 10000 / (32 * 32) - 1, 40,     // a bit less than 32
57f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
58f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 480, BitmapUtils.UNCONSTRAINED, 1,  // 1
59f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 240, BitmapUtils.UNCONSTRAINED, 2,  // 2
60f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 160, BitmapUtils.UNCONSTRAINED, 4,  // 3->4
61f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 120, BitmapUtils.UNCONSTRAINED, 4,  // 4
62f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 96, BitmapUtils.UNCONSTRAINED,  8,  // 5->8
63f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 80, BitmapUtils.UNCONSTRAINED,  8,  // 6->8
64f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 60, BitmapUtils.UNCONSTRAINED,  8,  // 8
65f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 48, BitmapUtils.UNCONSTRAINED, 16,  // 10->16
66f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 40, BitmapUtils.UNCONSTRAINED, 16,  // 12->16
67f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 30, BitmapUtils.UNCONSTRAINED, 16,  // 16
68f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 24, BitmapUtils.UNCONSTRAINED, 24,  // 20->24
69f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 20, BitmapUtils.UNCONSTRAINED, 24,  // 24
70f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 16, BitmapUtils.UNCONSTRAINED, 32,  // 30->32
71f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 12, BitmapUtils.UNCONSTRAINED, 40,  // 40
72f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 10, BitmapUtils.UNCONSTRAINED, 48,  // 48
73f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 8, BitmapUtils.UNCONSTRAINED,  64,  // 60->64
74f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 6, BitmapUtils.UNCONSTRAINED,  80,  // 80
75f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 4, BitmapUtils.UNCONSTRAINED, 120,  // 120
76f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 3, BitmapUtils.UNCONSTRAINED, 160,  // 160
77f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 2, BitmapUtils.UNCONSTRAINED, 240,  // 240
78f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, 1, BitmapUtils.UNCONSTRAINED, 480,  // 480
79f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
80f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, BitmapUtils.UNCONSTRAINED, 1,
81f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480, 1,                  // 1
82f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 - 1, 2,              // a bit less than 1
83f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 / 4, 2,              // 2
84f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 / 4 - 1, 4,          // a bit less than 2
85f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 / 9, 4,              // 3
86f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 / 9 - 1, 4,          // a bit less than 3
87f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 / 16, 4,             // 4
88f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 / 16 - 1, 8,         // a bit less than 4
89f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 / 64, 8,             // 8
90f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 / 64 - 1, 16,        // a bit less than 8
91f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 / 256, 16,           // 16
92f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 / 256 - 1, 24,       // a bit less than 16
93f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        640, 480, BitmapUtils.UNCONSTRAINED, 640 * 480 / (24 * 24) - 1, 32, // a bit less than 24
94f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    };
95f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
96f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    @SmallTest
97f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void testComputeSampleSize() {
98f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
99f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        for (int i = 0; i < testData.length; i += 5) {
100f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int w = testData[i];
101f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int h = testData[i + 1];
102f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int minSide = testData[i + 2];
103f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int maxPixels = testData[i + 3];
104f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int sampleSize = testData[i + 4];
105f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            int result = BitmapUtils.computeSampleSize(w, h, minSide, maxPixels);
106f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            if (result != sampleSize) {
107f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                Log.v(TAG, w + "x" + h + ", minSide = " + minSide + ", maxPixels = "
108f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                        + maxPixels + ", sampleSize = " + sampleSize + ", result = "
109f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                        + result);
110f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
111f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            assertTrue(sampleSize == result);
112f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
113f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
114f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
115f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void testAssert() {
116f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        // This should not throw an exception.
117f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Utils.assertTrue(true);
118f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
119f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        // This should throw an exception.
120f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        try {
121f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            Utils.assertTrue(false);
122f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            fail();
123f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } catch (AssertionError ex) {
124f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            // expected.
125f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
126f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
127f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
128f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void testCheckNotNull() {
129f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        // These should not throw an expection.
130f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Utils.checkNotNull(new Object());
131f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Utils.checkNotNull(0);
132f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Utils.checkNotNull("");
133f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
134f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        // This should throw an expection.
135f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        try {
136f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            Utils.checkNotNull(null);
137f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            fail();
138f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        } catch (NullPointerException ex) {
139f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            // expected.
140f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
141f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
142f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
143f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void testEquals() {
144f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Object a = new Object();
145f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        Object b = new Object();
146f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
147f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertTrue(Utils.equals(null, null));
148f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertTrue(Utils.equals(a, a));
149f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertFalse(Utils.equals(null, a));
150f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertFalse(Utils.equals(a, null));
151f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertFalse(Utils.equals(a, b));
152f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
153f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
154f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void testNextPowerOf2() {
155f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        int[] q = new int[] {1, 2, 3, 4, 5, 6, 10, 65535, (1 << 30) - 1, (1 << 30)};
156f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        int[] a = new int[] {1, 2, 4, 4, 8, 8, 16, 65536, (1 << 30)    , (1 << 30)};
157f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
158f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        for (int i = 0; i < q.length; i++) {
159f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            assertEquals(a[i], Utils.nextPowerOf2(q[i]));
160f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
161f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
162f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        int[] e = new int[] {0, -1, -2, -4, -65536, (1 << 30) + 1, Integer.MAX_VALUE};
163f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
164f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        for (int v : e) {
165f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            try {
166f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                Utils.nextPowerOf2(v);
167f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                fail();
168f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            } catch (IllegalArgumentException ex) {
169f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin                // expected.
170f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            }
171f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
172f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
173f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
174f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void testClamp() {
175f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertEquals(1000, Utils.clamp(300, 1000, 2000));
176f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertEquals(1300, Utils.clamp(1300, 1000, 2000));
177f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertEquals(2000, Utils.clamp(2300, 1000, 2000));
178f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
179f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertEquals(0.125f, Utils.clamp(0.1f, 0.125f, 0.5f));
180f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertEquals(0.25f, Utils.clamp(0.25f, 0.125f, 0.5f));
181f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertEquals(0.5f, Utils.clamp(0.9f, 0.125f, 0.5f));
182f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
183f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
184f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public void testIsOpaque() {
185f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertTrue(Utils.isOpaque(0xFF000000));
186f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertTrue(Utils.isOpaque(0xFFFFFFFF));
187f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertTrue(Utils.isOpaque(0xFF123456));
188f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
189f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertFalse(Utils.isOpaque(0xFEFFFFFF));
190f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertFalse(Utils.isOpaque(0x8FFFFFFF));
191f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertFalse(Utils.isOpaque(0x00FF0000));
192f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertFalse(Utils.isOpaque(0x5500FF00));
193f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        assertFalse(Utils.isOpaque(0xAA0000FF));
194f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
195f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin
196f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    public static void assertFloatEq(float expected, float actual) {
197f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        if (Math.abs(actual - expected) > 1e-6) {
198f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            Log.v(TAG, "expected: " + expected + ", actual: " + actual);
199f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin            fail();
200f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin        }
201f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin    }
202f9a0a4306d589b4a4e20554fed512a603426bfa1Owen Lin}
203