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