1b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin/*
2b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * Copyright (C) 2013 The Android Open Source Project
3b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin *
4b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * Licensed under the Apache License, Version 2.0 (the "License");
5b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * you may not use this file except in compliance with the License.
6b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * You may obtain a copy of the License at
7b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin *
8b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin *      http://www.apache.org/licenses/LICENSE-2.0
9b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin *
10b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * Unless required by applicable law or agreed to in writing, software
11b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * distributed under the License is distributed on an "AS IS" BASIS,
12b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * See the License for the specific language governing permissions and
14b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * limitations under the License.
15b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin */
16b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
17b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkinpackage com.android.mediaframeworktest.unit;
18b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
19b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkinimport android.test.suitebuilder.annotation.SmallTest;
202f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvalaimport android.hardware.camera2.Rational;
21b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
22b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin/**
23b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * <pre>
24b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * adb shell am instrument \
25b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin *      -e class 'com.android.mediaframeworktest.unit.RationalTest' \
26b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin *      -w com.android.mediaframeworktest/.MediaFrameworkUnitTestRunner
27b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin * </pre>
28b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin */
29b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkinpublic class RationalTest extends junit.framework.TestCase {
30b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin    @SmallTest
31b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin    public void testConstructor() {
32b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
33b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        // Simple case
34b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        Rational r = new Rational(1, 2);
35b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(1, r.getNumerator());
36b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(2, r.getDenominator());
37b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
38b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        // Denominator negative
39b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        r = new Rational(-1, 2);
40b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(-1, r.getNumerator());
41b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(2, r.getDenominator());
42b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
43b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        // Numerator negative
44b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        r = new Rational(1, -2);
45b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(-1, r.getNumerator());
46b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(2, r.getDenominator());
47b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
48b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        // Both negative
49b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        r = new Rational(-1, -2);
50b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(1, r.getNumerator());
51b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(2, r.getDenominator());
52b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
5323c8809568b68430f875df759108c58016c44c16Timothy Knight        // Infinity.
5423c8809568b68430f875df759108c58016c44c16Timothy Knight        r = new Rational(1, 0);
5523c8809568b68430f875df759108c58016c44c16Timothy Knight        assertEquals(0, r.getNumerator());
5623c8809568b68430f875df759108c58016c44c16Timothy Knight        assertEquals(0, r.getDenominator());
5723c8809568b68430f875df759108c58016c44c16Timothy Knight
5823c8809568b68430f875df759108c58016c44c16Timothy Knight        // Negative infinity.
5923c8809568b68430f875df759108c58016c44c16Timothy Knight        r = new Rational(-1, 0);
6023c8809568b68430f875df759108c58016c44c16Timothy Knight        assertEquals(0, r.getNumerator());
6123c8809568b68430f875df759108c58016c44c16Timothy Knight        assertEquals(0, r.getDenominator());
6223c8809568b68430f875df759108c58016c44c16Timothy Knight
6323c8809568b68430f875df759108c58016c44c16Timothy Knight        // NaN.
6423c8809568b68430f875df759108c58016c44c16Timothy Knight        r = new Rational(0, 0);
6523c8809568b68430f875df759108c58016c44c16Timothy Knight        assertEquals(0, r.getNumerator());
6623c8809568b68430f875df759108c58016c44c16Timothy Knight        assertEquals(0, r.getDenominator());
67b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin    }
68b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
69b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin    @SmallTest
70b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin    public void testGcd() {
71b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        Rational r = new Rational(1, 2);
72b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(1, r.gcd());
73b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
74b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        Rational twoThirds = new Rational(2, 3);
75b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(1, twoThirds.gcd());
76b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
77b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        Rational moreComplicated2 = new Rational(5*78, 7*78);
78b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(78, moreComplicated2.gcd());
79b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
80b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        Rational oneHalf = new Rational(-1, 2);
81b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(1, oneHalf.gcd());
82b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
83b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        twoThirds = new Rational(-2, 3);
84b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(1, twoThirds.gcd());
85b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin    }
86b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
87b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin    @SmallTest
88b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin    public void testEquals() {
89b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        Rational r = new Rational(1, 2);
90b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(1, r.getNumerator());
91b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(2, r.getDenominator());
92b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
93b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(r, r);
94b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertFalse(r.equals(null));
95b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertFalse(r.equals(new Object()));
96b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
97b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        Rational twoThirds = new Rational(2, 3);
98b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertFalse(r.equals(twoThirds));
99b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertFalse(twoThirds.equals(r));
100b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
101b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        Rational fourSixths = new Rational(4, 6);
102b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(twoThirds, fourSixths);
103b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(fourSixths, twoThirds);
104b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
105b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        Rational moreComplicated = new Rational(5*6*7*8*9, 1*2*3*4*5);
106b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        Rational moreComplicated2 = new Rational(5*6*7*8*9*78, 1*2*3*4*5*78);
107b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(moreComplicated, moreComplicated2);
108b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(moreComplicated2, moreComplicated);
109b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
110b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        // Ensure negatives are fine
111b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        twoThirds = new Rational(-2, 3);
112b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        fourSixths = new Rational(-4, 6);
113b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(twoThirds, fourSixths);
114b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(fourSixths, twoThirds);
115b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
116b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        moreComplicated = new Rational(-5*6*7*8*9, 1*2*3*4*5);
117b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        moreComplicated2 = new Rational(-5*6*7*8*9*78, 1*2*3*4*5*78);
118b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(moreComplicated, moreComplicated2);
119b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin        assertEquals(moreComplicated2, moreComplicated);
120b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin
12123c8809568b68430f875df759108c58016c44c16Timothy Knight        Rational nan = new Rational(0, 0);
12223c8809568b68430f875df759108c58016c44c16Timothy Knight        Rational nan2 = new Rational(0, 0);
12323c8809568b68430f875df759108c58016c44c16Timothy Knight        assertTrue(nan.equals(nan));
12423c8809568b68430f875df759108c58016c44c16Timothy Knight        assertTrue(nan.equals(nan2));
12523c8809568b68430f875df759108c58016c44c16Timothy Knight        assertTrue(nan2.equals(nan));
12623c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(nan.equals(r));
12723c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(r.equals(nan));
12823c8809568b68430f875df759108c58016c44c16Timothy Knight
12923c8809568b68430f875df759108c58016c44c16Timothy Knight        // Infinities of the same sign are equal.
13023c8809568b68430f875df759108c58016c44c16Timothy Knight        Rational posInf = new Rational(1, 0);
13123c8809568b68430f875df759108c58016c44c16Timothy Knight        Rational posInf2 = new Rational(2, 0);
13223c8809568b68430f875df759108c58016c44c16Timothy Knight        Rational negInf = new Rational(-1, 0);
13323c8809568b68430f875df759108c58016c44c16Timothy Knight        Rational negInf2 = new Rational(-2, 0);
13423c8809568b68430f875df759108c58016c44c16Timothy Knight        assertEquals(posInf, posInf);
13523c8809568b68430f875df759108c58016c44c16Timothy Knight        assertEquals(negInf, negInf);
13623c8809568b68430f875df759108c58016c44c16Timothy Knight        assertEquals(posInf, posInf2);
13723c8809568b68430f875df759108c58016c44c16Timothy Knight        assertEquals(negInf, negInf2);
13823c8809568b68430f875df759108c58016c44c16Timothy Knight
13923c8809568b68430f875df759108c58016c44c16Timothy Knight        // Infinities aren't equal to anything else.
14023c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(posInf.equals(negInf));
14123c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(negInf.equals(posInf));
14223c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(negInf.equals(r));
14323c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(posInf.equals(r));
14423c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(r.equals(negInf));
14523c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(r.equals(posInf));
14623c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(posInf.equals(nan));
14723c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(negInf.equals(nan));
14823c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(nan.equals(posInf));
14923c8809568b68430f875df759108c58016c44c16Timothy Knight        assertFalse(nan.equals(negInf));
150b519cc52ecba8f44da31173c9fc90a7b66d52b79Igor Murashkin    }
15123c8809568b68430f875df759108c58016c44c16Timothy Knight}
152