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 static java.math.BigInteger.ONE; 181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.math.BigInteger; 201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport java.util.Random; 211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport junit.framework.TestCase; 231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtCompatible; 251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.annotations.GwtIncompatible; 261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertimport com.google.common.testing.NullPointerTester; 271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert/** 291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * Tests for UnsignedLongs 301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * 311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Brian Milch 321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert * @author Louis Wasserman 331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert */ 341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert@GwtCompatible(emulated = true) 351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringertpublic class UnsignedLongsTest extends TestCase { 361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testCompare() { 381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // max value 391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue((UnsignedLongs.compare(0, 0xffffffffffffffffL) < 0)); 401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue((UnsignedLongs.compare(0xffffffffffffffffL, 0) > 0)); 411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // both with high bit set 431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue((UnsignedLongs.compare(0xff1a618b7f65ea12L, 0xffffffffffffffffL) < 0)); 441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue((UnsignedLongs.compare(0xffffffffffffffffL, 0xff1a618b7f65ea12L) > 0)); 451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // one with high bit set 471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue((UnsignedLongs.compare(0x5a4316b8c153ac4dL, 0xff1a618b7f65ea12L) < 0)); 481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue((UnsignedLongs.compare(0xff1a618b7f65ea12L, 0x5a4316b8c153ac4dL) > 0)); 491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // neither with high bit set 511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue((UnsignedLongs.compare(0x5a4316b8c153ac4dL, 0x6cf78a4b139a4e2aL) < 0)); 521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue((UnsignedLongs.compare(0x6cf78a4b139a4e2aL, 0x5a4316b8c153ac4dL) > 0)); 531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // same value 551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue((UnsignedLongs.compare(0xff1a618b7f65ea12L, 0xff1a618b7f65ea12L) == 0)); 561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testDivide() { 591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(2, UnsignedLongs.divide(14, 5)); 601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, UnsignedLongs.divide(0, 50)); 611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, UnsignedLongs.divide(0xfffffffffffffffeL, 0xfffffffffffffffdL)); 621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, UnsignedLongs.divide(0xfffffffffffffffdL, 0xfffffffffffffffeL)); 631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(281479271743488L, UnsignedLongs.divide(0xfffffffffffffffeL, 65535)); 641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0x7fffffffffffffffL, UnsignedLongs.divide(0xfffffffffffffffeL, 2)); 651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(3689348814741910322L, UnsignedLongs.divide(0xfffffffffffffffeL, 5)); 661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testRemainder() { 691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, UnsignedLongs.remainder(14, 5)); 701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, UnsignedLongs.remainder(0, 50)); 711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(1, UnsignedLongs.remainder(0xfffffffffffffffeL, 0xfffffffffffffffdL)); 721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0xfffffffffffffffdL, 731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnsignedLongs.remainder(0xfffffffffffffffdL, 0xfffffffffffffffeL)); 741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(65534L, UnsignedLongs.remainder(0xfffffffffffffffeL, 65535)); 751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0, UnsignedLongs.remainder(0xfffffffffffffffeL, 2)); 761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(4, UnsignedLongs.remainder(0xfffffffffffffffeL, 5)); 771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("Too slow in GWT (~3min fully optimized)") 801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testDivideRemainderEuclideanProperty() { 811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Use a seed so that the test is deterministic: 821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert Random r = new Random(0L); 831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int i = 0; i < 1000000; i++) { 841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert long dividend = r.nextLong(); 851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert long divisor = r.nextLong(); 861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Test that the Euclidean property is preserved: 871d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(dividend - (divisor * UnsignedLongs.divide(dividend, divisor) 881d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert + UnsignedLongs.remainder(dividend, divisor)) == 0); 891d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 901d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 911d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 921d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testParseLong() { 931d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 941d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0xffffffffffffffffL, UnsignedLongs.parseUnsignedLong("18446744073709551615")); 951d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0x7fffffffffffffffL, UnsignedLongs.parseUnsignedLong("9223372036854775807")); 961d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0xff1a618b7f65ea12L, UnsignedLongs.parseUnsignedLong("18382112080831834642")); 971d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0x5a4316b8c153ac4dL, UnsignedLongs.parseUnsignedLong("6504067269626408013")); 981d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0x6cf78a4b139a4e2aL, UnsignedLongs.parseUnsignedLong("7851896530399809066")); 991d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NumberFormatException e) { 1001d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(e.getMessage()); 1011d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1021d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1031d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert boolean overflowCaught = false; 1041d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1051d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // One more than maximum value 1061d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnsignedLongs.parseUnsignedLong("18446744073709551616"); 1071d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NumberFormatException e) { 1081d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert overflowCaught = true; 1091d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1101d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertTrue(overflowCaught); 1111d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1121d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1131d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testParseLongWithRadix() throws NumberFormatException { 1141d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0xffffffffffffffffL, UnsignedLongs.parseUnsignedLong("ffffffffffffffff", 16)); 1151d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(0x1234567890abcdefL, UnsignedLongs.parseUnsignedLong("1234567890abcdef", 16)); 1161d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1171d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BigInteger max = BigInteger.ZERO.setBit(64).subtract(ONE); 1181d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // loops through all legal radix values. 1191d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) { 1201d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // tests can successfully parse a number string with this radix. 1211d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String maxAsString = max.toString(radix); 1221d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(max.longValue(), UnsignedLongs.parseUnsignedLong(maxAsString, radix)); 1231d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1241d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1251d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // tests that we get exception whre an overflow would occur. 1261d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BigInteger overflow = max.add(ONE); 1271d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String overflowAsString = overflow.toString(radix); 1281d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnsignedLongs.parseUnsignedLong(overflowAsString, radix); 1291d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1301d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NumberFormatException nfe) { 1311d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // expected 1321d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1331d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1341d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1351d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1361d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testParseLongThrowsExceptionForInvalidRadix() { 1371d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // Valid radix values are Character.MIN_RADIX to Character.MAX_RADIX, 1381d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // inclusive. 1391d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1401d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnsignedLongs.parseUnsignedLong("0", Character.MIN_RADIX - 1); 1411d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1421d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NumberFormatException nfe) { 1431d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // expected 1441d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1451d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1461d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1471d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnsignedLongs.parseUnsignedLong("0", Character.MAX_RADIX + 1); 1481d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1491d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NumberFormatException nfe) { 1501d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // expected 1511d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1521d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1531d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // The radix is used as an array index, so try a negative value. 1541d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert try { 1551d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert UnsignedLongs.parseUnsignedLong("0", -1); 1561d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert fail(); 1571d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } catch (NumberFormatException nfe) { 1581d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert // expected 1591d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1601d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1611d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1621d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testToString() { 1631d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert String[] tests = { 1641d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "ffffffffffffffff", 1651d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "7fffffffffffffff", 1661d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "ff1a618b7f65ea12", 1671d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "5a4316b8c153ac4d", 1681d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert "6cf78a4b139a4e2a"}; 1691d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert int[] bases = {2, 5, 7, 8, 10, 16}; 1701d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (int base : bases) { 1711d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert for (String x : tests) { 1721d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert BigInteger xValue = new BigInteger(x, 16); 1731d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert long xLong = xValue.longValue(); // signed 1741d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert assertEquals(xValue.toString(base), UnsignedLongs.toString(xLong, base)); 1751d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1761d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1771d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1781d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert 1791d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert @GwtIncompatible("NullPointerTester") 1801d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert public void testNulls() throws Exception { 1811d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert NullPointerTester tester = new NullPointerTester(); 1821d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.setDefault(long[].class, new long[0]); 1831d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.setDefault(BigInteger.class, BigInteger.ZERO); 1841d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert tester.testAllPublicStaticMethods(UnsignedLongs.class); 1851d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert } 1861d580d0f6ee4f21eb309ba7b509d2c6d671c4044Bjorn Bringert} 187