11d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/*
21d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Copyright (C) 2011 The Guava Authors
31d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
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
61d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
71d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * http://www.apache.org/licenses/LICENSE-2.0
81d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
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 java.math.BigInteger;
181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase;
201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible;
221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible;
231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.collect.ImmutableSet;
241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.EqualsTester;
251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester;
261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.SerializableTester;
271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/**
291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for {@code UnsignedLong}.
301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert *
311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman
321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */
331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true)
341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class UnsignedLongTest extends TestCase {
351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  private static final ImmutableSet<Long> TEST_LONGS;
361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  static {
381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    ImmutableSet.Builder<Long> testLongsBuilder = ImmutableSet.builder();
391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long i = -3; i <= 3; i++) {
401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      testLongsBuilder
411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          .add(i)
421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          .add(Long.MAX_VALUE + i)
431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          .add(Long.MIN_VALUE + i)
441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          .add(Integer.MIN_VALUE + i)
451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          .add(Integer.MAX_VALUE + i);
461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    TEST_LONGS = testLongsBuilder.build();
481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAsUnsignedAndLongValueAreInverses() {
511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long value : TEST_LONGS) {
521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(
531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          UnsignedLongs.toString(value), value, UnsignedLong.asUnsigned(value).longValue());
541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAsUnsignedBigIntegerValue() {
581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long value : TEST_LONGS) {
591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      BigInteger expected = (value >= 0)
601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          ? BigInteger.valueOf(value)
611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          : BigInteger.valueOf(value).add(BigInteger.ZERO.setBit(64));
621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(UnsignedLongs.toString(value), expected,
631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          UnsignedLong.asUnsigned(value).bigIntegerValue());
641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testToString() {
681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long value : TEST_LONGS) {
691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      UnsignedLong unsignedValue = UnsignedLong.asUnsigned(value);
701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(unsignedValue.bigIntegerValue().toString(), unsignedValue.toString());
711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("too slow")
751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testToStringRadix() {
761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) {
771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (long l : TEST_LONGS) {
781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong value = UnsignedLong.asUnsigned(l);
791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(value.bigIntegerValue().toString(radix), value.toString(radix));
801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testToStringRadixQuick() {
851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    int[] radices = {2, 3, 5, 7, 10, 12, 16, 21, 31, 36};
861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (int radix : radices) {
871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (long l : TEST_LONGS) {
881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong value = UnsignedLong.asUnsigned(l);
891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(value.bigIntegerValue().toString(radix), value.toString(radix));
901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testFloatValue() {
951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long value : TEST_LONGS) {
961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      UnsignedLong unsignedValue = UnsignedLong.asUnsigned(value);
971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(unsignedValue.bigIntegerValue().floatValue(), unsignedValue.floatValue());
981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testDoubleValue() {
1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long value : TEST_LONGS) {
1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      UnsignedLong unsignedValue = UnsignedLong.asUnsigned(value);
1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(unsignedValue.bigIntegerValue().doubleValue(), unsignedValue.doubleValue());
1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testAdd() {
1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long a : TEST_LONGS) {
1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (long b : TEST_LONGS) {
1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        long expected = aUnsigned
1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .bigIntegerValue()
1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .add(bUnsigned.bigIntegerValue())
1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .longValue();
1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong unsignedSum = aUnsigned.add(bUnsigned);
1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(expected, unsignedSum.longValue());
1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testSubtract() {
1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long a : TEST_LONGS) {
1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (long b : TEST_LONGS) {
1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        long expected = aUnsigned
1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .bigIntegerValue()
1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .subtract(bUnsigned.bigIntegerValue())
1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .longValue();
1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong unsignedSub = aUnsigned.subtract(bUnsigned);
1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(expected, unsignedSub.longValue());
1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testMultiply() {
1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long a : TEST_LONGS) {
1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (long b : TEST_LONGS) {
1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        long expected = aUnsigned
1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .bigIntegerValue()
1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .multiply(bUnsigned.bigIntegerValue())
1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            .longValue();
1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong unsignedMul = aUnsigned.multiply(bUnsigned);
1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(expected, unsignedMul.longValue());
1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testDivide() {
1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long a : TEST_LONGS) {
1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (long b : TEST_LONGS) {
1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        if (b != 0) {
1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          long expected = aUnsigned
1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              .bigIntegerValue()
1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              .divide(bUnsigned.bigIntegerValue())
1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              .longValue();
1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          UnsignedLong unsignedDiv = aUnsigned.divide(bUnsigned);
1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          assertEquals(expected, unsignedDiv.longValue());
1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        }
1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testDivideByZeroThrows() {
1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long a : TEST_LONGS) {
1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      try {
1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong.asUnsigned(a).divide(UnsignedLong.ZERO);
1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        fail("Expected ArithmeticException");
1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      } catch (ArithmeticException expected) {}
1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testRemainder() {
1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long a : TEST_LONGS) {
1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (long b : TEST_LONGS) {
1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        if (b != 0) {
1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          long expected = aUnsigned
1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              .bigIntegerValue()
1871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              .remainder(bUnsigned.bigIntegerValue())
1881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert              .longValue();
1891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          UnsignedLong unsignedRem = aUnsigned.remainder(bUnsigned);
1901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          assertEquals(expected, unsignedRem.longValue());
1911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        }
1921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
1931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
1941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
1951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
1961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testRemainderByZero() {
1971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long a : TEST_LONGS) {
1981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      try {
1991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong.asUnsigned(a).remainder(UnsignedLong.ZERO);
2001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        fail("Expected ArithmeticException");
2011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      } catch (ArithmeticException expected) {}
2021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testCompare() {
2061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long a : TEST_LONGS) {
2071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      for (long b : TEST_LONGS) {
2081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
2091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        UnsignedLong bUnsigned = UnsignedLong.asUnsigned(b);
2101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert        assertEquals(aUnsigned.bigIntegerValue().compareTo(bUnsigned.bigIntegerValue()),
2111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert            aUnsigned.compareTo(bUnsigned));
2121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      }
2131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("too slow")
2171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testEqualsAndValueOf() {
2181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    EqualsTester equalsTester = new EqualsTester();
2191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long a : TEST_LONGS) {
2201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      BigInteger big =
2211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          (a >= 0) ? BigInteger.valueOf(a) : BigInteger.valueOf(a).add(BigInteger.ZERO.setBit(64));
2221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      equalsTester.addEqualityGroup(UnsignedLong.asUnsigned(a), UnsignedLong.valueOf(big),
2231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert          UnsignedLong.valueOf(big.toString()), UnsignedLong.valueOf(big.toString(16), 16));
2241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    equalsTester.testEquals();
2261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testIntValue() {
2291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long a : TEST_LONGS) {
2301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      UnsignedLong aUnsigned = UnsignedLong.asUnsigned(a);
2311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      int intValue = aUnsigned.bigIntegerValue().intValue();
2321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      assertEquals(intValue, aUnsigned.intValue());
2331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("serialization")
2371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testSerialization() {
2381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    for (long a : TEST_LONGS) {
2391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert      SerializableTester.reserializeAndAssert(UnsignedLong.asUnsigned(a));
2401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    }
2411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert
2431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  @GwtIncompatible("NullPointerTester")
2441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  public void testNulls() throws Exception {
2451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    NullPointerTester tester = new NullPointerTester();
2461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    tester.setDefault(UnsignedLong.class, UnsignedLong.ONE);
2471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert    tester.testAllPublicStaticMethods(UnsignedLong.class);
2481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert  }
2491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert}
250