11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/* 21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2011 The Guava Authors 37dd252788645e940eada959bdde927426e2531c9Paul Duffin * 41d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 51d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * in compliance with the License. You may obtain a copy of the License at 67dd252788645e940eada959bdde927426e2531c9Paul Duffin * 71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0 87dd252788645e940eada959bdde927426e2531c9Paul Duffin * 91d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Unless required by applicable law or agreed to in writing, software distributed under the 101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * express or implied. See the License for the specific language governing permissions and 121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * limitations under the License. 131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpackage com.google.common.primitives; 161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableSet; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.EqualsTester; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 247dd252788645e940eada959bdde927426e2531c9Paul Duffinimport junit.framework.TestCase; 257dd252788645e940eada959bdde927426e2531c9Paul Duffin 260888a09821a98ac0680fad765217302858e70fa4Paul Duffinimport java.math.BigInteger; 270888a09821a98ac0680fad765217302858e70fa4Paul Duffin 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@code UnsignedInteger}. 307dd252788645e940eada959bdde927426e2531c9Paul Duffin * 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class UnsignedIntegerTest extends TestCase { 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static final ImmutableSet<Integer> TEST_INTS; 367dd252788645e940eada959bdde927426e2531c9Paul Duffin private static final ImmutableSet<Long> TEST_LONGS; 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert private static int force32(int value) { 397dd252788645e940eada959bdde927426e2531c9Paul Duffin // GWT doesn't consistently overflow values to make them 32-bit, so we need to force it. 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert return value & 0xffffffff; 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert static { 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert ImmutableSet.Builder<Integer> testIntsBuilder = ImmutableSet.builder(); 457dd252788645e940eada959bdde927426e2531c9Paul Duffin ImmutableSet.Builder<Long> testLongsBuilder = ImmutableSet.builder(); 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = -3; i <= 3; i++) { 477dd252788645e940eada959bdde927426e2531c9Paul Duffin testIntsBuilder 487dd252788645e940eada959bdde927426e2531c9Paul Duffin .add(i) 497dd252788645e940eada959bdde927426e2531c9Paul Duffin .add(force32(Integer.MIN_VALUE + i)) 507dd252788645e940eada959bdde927426e2531c9Paul Duffin .add(force32(Integer.MAX_VALUE + i)); 517dd252788645e940eada959bdde927426e2531c9Paul Duffin testLongsBuilder 527dd252788645e940eada959bdde927426e2531c9Paul Duffin .add((long) i) 537dd252788645e940eada959bdde927426e2531c9Paul Duffin .add((long) Integer.MIN_VALUE + i) 547dd252788645e940eada959bdde927426e2531c9Paul Duffin .add((long) Integer.MAX_VALUE + i) 557dd252788645e940eada959bdde927426e2531c9Paul Duffin .add((1L << 32) + i); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert TEST_INTS = testIntsBuilder.build(); 587dd252788645e940eada959bdde927426e2531c9Paul Duffin TEST_LONGS = testLongsBuilder.build(); 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 617dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testFromIntBitsAndIntValueAreInverses() { 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int value : TEST_INTS) { 637dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(UnsignedInts.toString(value), value, UnsignedInteger.fromIntBits(value) 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .intValue()); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 687dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testFromIntBitsLongValue() { 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int value : TEST_INTS) { 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert long expected = value & 0xffffffffL; 717dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(UnsignedInts.toString(value), expected, UnsignedInteger.fromIntBits(value) 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert .longValue()); 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 757dd252788645e940eada959bdde927426e2531c9Paul Duffin 767dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testValueOfLong() { 777dd252788645e940eada959bdde927426e2531c9Paul Duffin long min = 0; 787dd252788645e940eada959bdde927426e2531c9Paul Duffin long max = (1L << 32) - 1; 797dd252788645e940eada959bdde927426e2531c9Paul Duffin for (long value : TEST_LONGS) { 807dd252788645e940eada959bdde927426e2531c9Paul Duffin boolean expectSuccess = value >= min && value <= max; 817dd252788645e940eada959bdde927426e2531c9Paul Duffin try { 827dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(value, UnsignedInteger.valueOf(value).longValue()); 837dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(expectSuccess); 847dd252788645e940eada959bdde927426e2531c9Paul Duffin } catch (IllegalArgumentException e) { 857dd252788645e940eada959bdde927426e2531c9Paul Duffin assertFalse(expectSuccess); 867dd252788645e940eada959bdde927426e2531c9Paul Duffin } 877dd252788645e940eada959bdde927426e2531c9Paul Duffin } 887dd252788645e940eada959bdde927426e2531c9Paul Duffin } 897dd252788645e940eada959bdde927426e2531c9Paul Duffin 907dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testValueOfBigInteger() { 917dd252788645e940eada959bdde927426e2531c9Paul Duffin long min = 0; 927dd252788645e940eada959bdde927426e2531c9Paul Duffin long max = (1L << 32) - 1; 937dd252788645e940eada959bdde927426e2531c9Paul Duffin for (long value : TEST_LONGS) { 947dd252788645e940eada959bdde927426e2531c9Paul Duffin boolean expectSuccess = value >= min && value <= max; 957dd252788645e940eada959bdde927426e2531c9Paul Duffin try { 967dd252788645e940eada959bdde927426e2531c9Paul Duffin assertEquals(value, UnsignedInteger.valueOf(BigInteger.valueOf(value)) 977dd252788645e940eada959bdde927426e2531c9Paul Duffin .longValue()); 987dd252788645e940eada959bdde927426e2531c9Paul Duffin assertTrue(expectSuccess); 997dd252788645e940eada959bdde927426e2531c9Paul Duffin } catch (IllegalArgumentException e) { 1007dd252788645e940eada959bdde927426e2531c9Paul Duffin assertFalse(expectSuccess); 1017dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1027dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1037dd252788645e940eada959bdde927426e2531c9Paul Duffin } 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToString() { 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int value : TEST_INTS) { 1077dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger unsignedValue = UnsignedInteger.fromIntBits(value); 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(unsignedValue.bigIntegerValue().toString(), unsignedValue.toString()); 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("too slow") 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToStringRadix() { 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) { 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int l : TEST_INTS) { 1167dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger value = UnsignedInteger.fromIntBits(l); 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(value.bigIntegerValue().toString(radix), value.toString(radix)); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToStringRadixQuick() { 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int[] radices = {2, 3, 5, 7, 10, 12, 16, 21, 31, 36}; 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int radix : radices) { 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int l : TEST_INTS) { 1267dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger value = UnsignedInteger.fromIntBits(l); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(value.bigIntegerValue().toString(radix), value.toString(radix)); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testFloatValue() { 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int value : TEST_INTS) { 1347dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger unsignedValue = UnsignedInteger.fromIntBits(value); 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(unsignedValue.bigIntegerValue().floatValue(), unsignedValue.floatValue()); 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testDoubleValue() { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int value : TEST_INTS) { 1417dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger unsignedValue = UnsignedInteger.fromIntBits(value); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(unsignedValue.bigIntegerValue().doubleValue(), unsignedValue.doubleValue()); 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1467dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testPlus() { 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int a : TEST_INTS) { 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int b : TEST_INTS) { 1497dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger aUnsigned = UnsignedInteger.fromIntBits(a); 1507dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger bUnsigned = UnsignedInteger.fromIntBits(b); 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int expected = aUnsigned.bigIntegerValue().add(bUnsigned.bigIntegerValue()).intValue(); 1527dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger unsignedSum = aUnsigned.plus(bUnsigned); 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, unsignedSum.intValue()); 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1587dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testMinus() { 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int a : TEST_INTS) { 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int b : TEST_INTS) { 1617dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger aUnsigned = UnsignedInteger.fromIntBits(a); 1627dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger bUnsigned = UnsignedInteger.fromIntBits(b); 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int expected = 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert force32(aUnsigned.bigIntegerValue().subtract(bUnsigned.bigIntegerValue()).intValue()); 1657dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger unsignedSub = aUnsigned.minus(bUnsigned); 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, unsignedSub.intValue()); 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("multiply") 1727dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testTimes() { 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int a : TEST_INTS) { 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int b : TEST_INTS) { 1757dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger aUnsigned = UnsignedInteger.fromIntBits(a); 1767dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger bUnsigned = UnsignedInteger.fromIntBits(b); 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int expected = 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert force32(aUnsigned.bigIntegerValue().multiply(bUnsigned.bigIntegerValue()).intValue()); 1797dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger unsignedMul = aUnsigned.times(bUnsigned); 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(aUnsigned + " * " + bUnsigned, expected, unsignedMul.intValue()); 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1857dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testDividedBy() { 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int a : TEST_INTS) { 1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int b : TEST_INTS) { 1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (b != 0) { 1897dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger aUnsigned = UnsignedInteger.fromIntBits(a); 1907dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger bUnsigned = UnsignedInteger.fromIntBits(b); 1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int expected = 1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert aUnsigned.bigIntegerValue().divide(bUnsigned.bigIntegerValue()).intValue(); 1937dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger unsignedDiv = aUnsigned.dividedBy(bUnsigned); 1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, unsignedDiv.intValue()); 1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testDivideByZeroThrows() { 2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int a : TEST_INTS) { 2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2030888a09821a98ac0680fad765217302858e70fa4Paul Duffin UnsignedInteger ignored = 2040888a09821a98ac0680fad765217302858e70fa4Paul Duffin UnsignedInteger.fromIntBits(a).dividedBy(UnsignedInteger.ZERO); 2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected ArithmeticException"); 2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (ArithmeticException expected) {} 2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2107dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testMod() { 2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int a : TEST_INTS) { 2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int b : TEST_INTS) { 2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert if (b != 0) { 2147dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger aUnsigned = UnsignedInteger.fromIntBits(a); 2157dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger bUnsigned = UnsignedInteger.fromIntBits(b); 2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int expected = 2177dd252788645e940eada959bdde927426e2531c9Paul Duffin aUnsigned.bigIntegerValue().mod(bUnsigned.bigIntegerValue()).intValue(); 2187dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger unsignedRem = aUnsigned.mod(bUnsigned); 2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(expected, unsignedRem.intValue()); 2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2257dd252788645e940eada959bdde927426e2531c9Paul Duffin @SuppressWarnings("ReturnValueIgnored") 2267dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testModByZero() { 2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int a : TEST_INTS) { 2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 2297dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger.fromIntBits(a).mod(UnsignedInteger.ZERO); 2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail("Expected ArithmeticException"); 2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (ArithmeticException expected) {} 2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCompare() { 2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int a : TEST_INTS) { 2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int b : TEST_INTS) { 2387dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger aUnsigned = UnsignedInteger.fromIntBits(a); 2397dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger bUnsigned = UnsignedInteger.fromIntBits(b); 2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(aUnsigned.bigIntegerValue().compareTo(bUnsigned.bigIntegerValue()), 2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert aUnsigned.compareTo(bUnsigned)); 2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("too slow") 2477dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testEquals() { 2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert EqualsTester equalsTester = new EqualsTester(); 2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int a : TEST_INTS) { 2501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert long value = a & 0xffffffffL; 2517dd252788645e940eada959bdde927426e2531c9Paul Duffin equalsTester.addEqualityGroup(UnsignedInteger.fromIntBits(a), UnsignedInteger.valueOf(value), 2521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnsignedInteger.valueOf(Long.toString(value)), 2531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnsignedInteger.valueOf(Long.toString(value, 16), 16)); 2541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert equalsTester.testEquals(); 2561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testIntValue() { 2591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int a : TEST_INTS) { 2607dd252788645e940eada959bdde927426e2531c9Paul Duffin UnsignedInteger aUnsigned = UnsignedInteger.fromIntBits(a); 2611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int intValue = aUnsigned.bigIntegerValue().intValue(); 2621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(intValue, aUnsigned.intValue()); 2631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("serialization") 2671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testSerialization() { 2681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int a : TEST_INTS) { 2697dd252788645e940eada959bdde927426e2531c9Paul Duffin SerializableTester.reserializeAndAssert(UnsignedInteger.fromIntBits(a)); 2701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 2731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 2747dd252788645e940eada959bdde927426e2531c9Paul Duffin public void testNulls() { 2757dd252788645e940eada959bdde927426e2531c9Paul Duffin new NullPointerTester().testAllPublicStaticMethods(UnsignedInteger.class); 2761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 2771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 278