1c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes/* 2c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * Copyright (C) 2011 The Android Open Source Project 3c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * 4c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * Licensed under the Apache License, Version 2.0 (the "License"); 5c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * you may not use this file except in compliance with the License. 6c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * You may obtain a copy of the License at 7c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * 8c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * http://www.apache.org/licenses/LICENSE-2.0 9c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * 10c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * Unless required by applicable law or agreed to in writing, software 11c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS, 12c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * See the License for the specific language governing permissions and 14c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes * limitations under the License. 15c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes */ 16c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes 17c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughespackage libcore.java.lang; 18c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes 19e2f147b9b14c7645f29e92758f811a18258feef4Yi Kongimport java.math.BigInteger; 20adb70766cf4d670bd9837c944de801061493038bCalin Juravleimport java.util.Properties; 21adb70766cf4d670bd9837c944de801061493038bCalin Juravle 22c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughespublic class LongTest extends junit.framework.TestCase { 23adb70766cf4d670bd9837c944de801061493038bCalin Juravle 246b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle public void testSystemProperties() { 25adb70766cf4d670bd9837c944de801061493038bCalin Juravle Properties originalProperties = System.getProperties(); 26adb70766cf4d670bd9837c944de801061493038bCalin Juravle try { 27adb70766cf4d670bd9837c944de801061493038bCalin Juravle Properties testProperties = new Properties(); 28adb70766cf4d670bd9837c944de801061493038bCalin Juravle testProperties.put("testIncLong", "string"); 29adb70766cf4d670bd9837c944de801061493038bCalin Juravle System.setProperties(testProperties); 30adb70766cf4d670bd9837c944de801061493038bCalin Juravle assertNull(Long.getLong("testIncLong")); 31adb70766cf4d670bd9837c944de801061493038bCalin Juravle assertEquals(new Long(4), Long.getLong("testIncLong", 4L)); 32adb70766cf4d670bd9837c944de801061493038bCalin Juravle assertEquals(new Long(4), Long.getLong("testIncLong", new Long(4))); 33adb70766cf4d670bd9837c944de801061493038bCalin Juravle } finally { 34adb70766cf4d670bd9837c944de801061493038bCalin Juravle System.setProperties(originalProperties); 35adb70766cf4d670bd9837c944de801061493038bCalin Juravle } 36adb70766cf4d670bd9837c944de801061493038bCalin Juravle } 37adb70766cf4d670bd9837c944de801061493038bCalin Juravle 386b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle public void testCompare() throws Exception { 39c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes final long min = Long.MIN_VALUE; 40c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes final long zero = 0L; 41c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes final long max = Long.MAX_VALUE; 42c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes assertTrue(Long.compare(max, max) == 0); 43c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes assertTrue(Long.compare(min, min) == 0); 44c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes assertTrue(Long.compare(zero, zero) == 0); 45c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes assertTrue(Long.compare(max, zero) > 0); 46c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes assertTrue(Long.compare(max, min) > 0); 47c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes assertTrue(Long.compare(zero, max) < 0); 48c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes assertTrue(Long.compare(zero, min) > 0); 49c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes assertTrue(Long.compare(min, zero) < 0); 50c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes assertTrue(Long.compare(min, max) < 0); 51c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes } 52769ff93bf19951ac9a345e783927132438aabf3cElliott Hughes 536b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle public void testSignum() throws Exception { 54769ff93bf19951ac9a345e783927132438aabf3cElliott Hughes assertEquals(0, Long.signum(0)); 55769ff93bf19951ac9a345e783927132438aabf3cElliott Hughes assertEquals(1, Long.signum(1)); 56769ff93bf19951ac9a345e783927132438aabf3cElliott Hughes assertEquals(-1, Long.signum(-1)); 57769ff93bf19951ac9a345e783927132438aabf3cElliott Hughes assertEquals(1, Long.signum(Long.MAX_VALUE)); 58769ff93bf19951ac9a345e783927132438aabf3cElliott Hughes assertEquals(-1, Long.signum(Long.MIN_VALUE)); 59769ff93bf19951ac9a345e783927132438aabf3cElliott Hughes } 60ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle 6146e3649f898305d185fc40bae2542e933a16b619Piotr Jastrzebski /* 626b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle public void testParsePositiveLong() throws Exception { 63ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle assertEquals(0, Long.parsePositiveLong("0", 10)); 64ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle assertEquals(473, Long.parsePositiveLong("473", 10)); 65ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle assertEquals(255, Long.parsePositiveLong("FF", 16)); 66ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle 67ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle try { 68ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle Long.parsePositiveLong("-1", 10); 69ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle fail(); 70ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle } catch (NumberFormatException e) {} 71ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle 72ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle try { 73ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle Long.parsePositiveLong("+1", 10); 74ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle fail(); 75ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle } catch (NumberFormatException e) {} 76ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle 77ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle try { 78ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle Long.parsePositiveLong("+0", 16); 79ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle fail(); 80ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle } catch (NumberFormatException e) {} 81ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle } 8246e3649f898305d185fc40bae2542e933a16b619Piotr Jastrzebski */ 83ae6e60bf18b455b1134b8b57a56b37cc588e179dCalin Juravle 846b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle public void testParseLong() throws Exception { 856b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(0, Long.parseLong("+0", 10)); 866b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(473, Long.parseLong("+473", 10)); 876b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(255, Long.parseLong("+FF", 16)); 886b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(102, Long.parseLong("+1100110", 2)); 896b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(Long.MAX_VALUE, Long.parseLong("+" + Long.MAX_VALUE, 10)); 906b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(411787, Long.parseLong("Kona", 27)); 916b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(411787, Long.parseLong("+Kona", 27)); 926b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(-145, Long.parseLong("-145", 10)); 936b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle 946b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle try { 956b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle Long.parseLong("--1", 10); // multiple sign chars 966b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle fail(); 976b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle } catch (NumberFormatException expected) {} 986b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle 996b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle try { 1006b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle Long.parseLong("++1", 10); // multiple sign chars 1016b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle fail(); 1026b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle } catch (NumberFormatException expected) {} 1036b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle 1046b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle try { 1056b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle Long.parseLong("Kona", 10); // base to small 1066b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle fail(); 1076b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle } catch (NumberFormatException expected) {} 1086b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle } 1096b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle 1106b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle public void testDecodeLong() throws Exception { 1116b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(0, Long.decode("+0").longValue()); 1126b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(473, Long.decode("+473").longValue()); 1136b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(255, Long.decode("+0xFF").longValue()); 1146b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(16, Long.decode("+020").longValue()); 1156b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(Long.MAX_VALUE, Long.decode("+" + Long.MAX_VALUE).longValue()); 1166b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(-73, Long.decode("-73").longValue()); 1176b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(-255, Long.decode("-0xFF").longValue()); 1186b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(255, Long.decode("+#FF").longValue()); 1196b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle assertEquals(-255, Long.decode("-#FF").longValue()); 1206b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle 1216b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle try { 1226b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle Long.decode("--1"); // multiple sign chars 1236b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle fail(); 1246b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle } catch (NumberFormatException expected) {} 1256b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle 1266b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle try { 1276b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle Long.decode("++1"); // multiple sign chars 1286b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle fail(); 1296b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle } catch (NumberFormatException expected) {} 1306b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle 1316b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle try { 1326b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle Long.decode("+-1"); // multiple sign chars 1336b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle fail(); 1346b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle } catch (NumberFormatException expected) {} 1356b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle 1366b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle try { 1376b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle Long.decode("Kona"); // invalid number 1386b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle fail(); 1396b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle } catch (NumberFormatException expected) {} 1406b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle } 1416b40837ee3a023bba698c38fd6d6e46ae0065a55Calin Juravle 1422729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath public void testStaticHashCode() { 1432729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath assertEquals(Long.valueOf(567L).hashCode(), Long.hashCode(567L)); 1442729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath } 1452729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath 1462729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath public void testMax() { 1472729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath long a = 567L; 1482729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath long b = 578L; 1492729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath assertEquals(Math.max(a, b), Long.max(a, b)); 1502729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath } 1512729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath 1522729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath public void testMin() { 1532729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath long a = 567L; 1542729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath long b = 578L; 1552729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath assertEquals(Math.min(a, b), Long.min(a, b)); 1562729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath } 1572729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath 1582729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath public void testSum() { 1592729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath long a = 567L; 1602729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath long b = 578L; 1612729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath assertEquals(a + b, Long.sum(a, b)); 1622729b8c4d261706b2ed7b17930d91c2b25e9a315Narayan Kamath } 163cf86f3319e738c76c5e97ad95bb8a4e30654a787Yi Kong 164cf86f3319e738c76c5e97ad95bb8a4e30654a787Yi Kong public void testBYTES() { 165cf86f3319e738c76c5e97ad95bb8a4e30654a787Yi Kong assertEquals(8, Long.BYTES); 166cf86f3319e738c76c5e97ad95bb8a4e30654a787Yi Kong } 167e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 168e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong public void testCompareUnsigned() { 169e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong long[] ordVals = {0L, 1L, 23L, 456L, 0x7fff_ffff_ffff_ffffL, 0x8000_0000_0000_0000L, 170e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 0xffff_ffff_ffff_ffffL}; 171e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong for(int i = 0; i < ordVals.length; ++i) { 172e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong for(int j = 0; j < ordVals.length; ++j) { 173e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertEquals(Integer.compare(i, j), 174e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong Long.compareUnsigned(ordVals[i], ordVals[j])); 175e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 176e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 177e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 178e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 179e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong public void testDivideAndRemainderUnsigned() { 180e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong BigInteger[] vals = { 181e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong BigInteger.ONE, 182e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong BigInteger.valueOf(23L), 183e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong BigInteger.valueOf(456L), 184e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong BigInteger.valueOf(0x7fff_ffff_ffff_ffffL), 185e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong BigInteger.valueOf(0x7fff_ffff_ffff_ffffL).add(BigInteger.ONE), 186e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong BigInteger.valueOf(2).shiftLeft(63).subtract(BigInteger.ONE) 187e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong }; 188e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 189e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong for(BigInteger dividend : vals) { 190e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong for(BigInteger divisor : vals) { 191e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong long uq = Long.divideUnsigned(dividend.longValue(), divisor.longValue()); 192e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong long ur = Long.remainderUnsigned(dividend.longValue(), divisor.longValue()); 193e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertEquals(dividend.divide(divisor).longValue(), uq); 194e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertEquals(dividend.remainder(divisor).longValue(), ur); 195e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertEquals(dividend.longValue(), uq * divisor.longValue() + ur); 196e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 197e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 198e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 199e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong for(BigInteger dividend : vals) { 200e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong try { 201e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong Long.divideUnsigned(dividend.longValue(), 0); 202e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong fail(); 203e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } catch (ArithmeticException expected) { } 204e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong try { 205e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong Long.remainderUnsigned(dividend.longValue(), 0); 206e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong fail(); 207e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } catch (ArithmeticException expected) { } 208e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 209e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 210e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 211e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong public void testParseUnsignedLong() { 212e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong long[] vals = {0L, 1L, 23L, 456L, 0x7fff_ffff_ffff_ffffL, 0x8000_0000_0000_0000L, 213e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 0xffff_ffff_ffff_ffffL}; 214e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 215e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong for(long val : vals) { 216e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong // Special radices 217e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertEquals(val, Long.parseUnsignedLong(Long.toBinaryString(val), 2)); 218e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertEquals(val, Long.parseUnsignedLong(Long.toOctalString(val), 8)); 219e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertEquals(val, Long.parseUnsignedLong(Long.toUnsignedString(val))); 220e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertEquals(val, Long.parseUnsignedLong(Long.toHexString(val), 16)); 221e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 222e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong for(int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; ++radix) { 223e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertEquals(val, 224e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong Long.parseUnsignedLong(Long.toUnsignedString(val, radix), radix)); 225e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 226e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 227e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 228e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong try { 229e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong Long.parseUnsignedLong("-1"); 230e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong fail(); 231e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } catch (NumberFormatException expected) { } 232e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong try { 233e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong Long.parseUnsignedLong("123", 2); 234e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong fail(); 235e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } catch (NumberFormatException expected) { } 236e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong try { 237e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong Long.parseUnsignedLong(null, 2); 238e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong fail(); 239e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } catch (NumberFormatException expected) { } 240e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong try { 241e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong Long.parseUnsignedLong("0", Character.MAX_RADIX + 1); 242e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong fail(); 243e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } catch (NumberFormatException expected) { } 244e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong try { 245e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong Long.parseUnsignedLong("0", Character.MIN_RADIX - 1); 246e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong fail(); 247e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } catch (NumberFormatException expected) { } 248e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 249e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 250e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong public void testToUnsignedString() { 251e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong long[] vals = {0L, 1L, 23L, 456L, 0x7fff_ffff_ffff_ffffL, 0x8000_0000_0000_0000L, 252e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 0xffff_ffff_ffff_ffffL}; 253e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 254e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong for(long val : vals) { 255e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong // Special radices 256e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertTrue(Long.toUnsignedString(val, 2).equals(Long.toBinaryString(val))); 257e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertTrue(Long.toUnsignedString(val, 8).equals(Long.toOctalString(val))); 258e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertTrue(Long.toUnsignedString(val, 10).equals(Long.toUnsignedString(val))); 259e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertTrue(Long.toUnsignedString(val, 16).equals(Long.toHexString(val))); 260e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 261e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong for(int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; ++radix) { 262e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong int upper = (int) (val >>> 32), lower = (int) val; 263e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong BigInteger b = (BigInteger.valueOf(Integer.toUnsignedLong(upper))).shiftLeft(32). 264e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong add(BigInteger.valueOf(Integer.toUnsignedLong(lower))); 265e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 266e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong assertTrue(Long.toUnsignedString(val, radix).equals(b.toString(radix))); 267e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 268e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong 269e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong // Behavior is not defined by Java API specification if the radix falls outside of valid 270e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong // range, thus we don't test for such cases. 271e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 272e2f147b9b14c7645f29e92758f811a18258feef4Yi Kong } 273c3adcfb1339de546aed6e7ff00a7edb020b8a85bElliott Hughes} 274