/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.addthis.basis.util;
import java.util.Random;
import java.util.UUID;
import java.math.BigInteger;
import junit.framework.TestCase;
public class LessNumbersTest extends TestCase {
public void testDecode() {
assertEquals(0, LessNumbers.intFromBase36("000000"));
assertEquals(1, LessNumbers.intFromBase36("000001"));
assertEquals(623714775, LessNumbers.intFromBase36("ABCDEF"));
assertEquals(22, LessNumbers.intFromBase36("M"));
assertEquals(35, LessNumbers.intFromBase36("Z"));
assertEquals(0, LessNumbers.intFromBase36("0"));
assertEquals(0, LessNumbers.intFromBase36("0"));
assertEquals(22, LessNumbers.intFromBase36("M"));
assertEquals(481261, LessNumbers.intFromBase36("abcd"));
assertEquals(62, LessNumbers.intFromBase64("-"));
assertEquals(63, LessNumbers.intFromBase64("_"));
assertEquals(0, LessNumbers.bigIntegerFromBase36("000000").intValue());
assertEquals(1, LessNumbers.bigIntegerFromBase36("000001").intValue());
assertEquals(623714775, LessNumbers.bigIntegerFromBase36("ABCDEF").intValue());
assertEquals(22, LessNumbers.bigIntegerFromBase36("M").intValue());
assertEquals(35, LessNumbers.bigIntegerFromBase36("Z").intValue());
assertEquals(0, LessNumbers.bigIntegerFromBase36("0").intValue());
assertEquals(0, LessNumbers.bigIntegerFromBase36("0").intValue());
assertEquals(22, LessNumbers.bigIntegerFromBase36("M").intValue());
assertEquals(481261, LessNumbers.bigIntegerFromBase36("abcd").intValue());
}
public void testEncode() {
assertEquals("0", LessNumbers.toBase36(0));
assertEquals("1", LessNumbers.toBase36(1));
assertEquals("1Q", LessNumbers.toBase36(62));
assertEquals("1R", LessNumbers.toBase36(63));
assertEquals("ZIK0ZJ", LessNumbers.toBase36(Integer.MAX_VALUE));
assertEquals("-", LessNumbers.toBase64(62));
assertEquals("_", LessNumbers.toBase64(63));
assertEquals("10", LessNumbers.toBase64(64));
assertEquals("L4_O", LessNumbers.toBase64(12341234));
assertEquals("1_____", LessNumbers.toBase64(Integer.MAX_VALUE));
assertEquals("0", LessNumbers.toBase36(BigInteger.valueOf(0)));
assertEquals("1", LessNumbers.toBase36(BigInteger.valueOf(1)));
assertEquals("1Q", LessNumbers.toBase36(BigInteger.valueOf(62)));
assertEquals("1R", LessNumbers.toBase36(BigInteger.valueOf(63)));
assertEquals("ZIK0ZJ", LessNumbers.toBase36(BigInteger.valueOf(Integer.MAX_VALUE)));
assertEquals("-", LessNumbers.toBase64(BigInteger.valueOf(62)));
assertEquals("_", LessNumbers.toBase64(BigInteger.valueOf(63)));
assertEquals("10", LessNumbers.toBase64(BigInteger.valueOf(64)));
assertEquals("L4_O", LessNumbers.toBase64(BigInteger.valueOf(12341234)));
assertEquals("1_____", LessNumbers.toBase64(BigInteger.valueOf(Integer.MAX_VALUE)));
}
public void testBigIntegers() {
BigInteger val = BigInteger.valueOf(Long.MAX_VALUE);
assertEquals(val, LessNumbers.bigIntegerFromBase36(LessNumbers.toBase36(val)));
assertEquals(val, LessNumbers.bigIntegerFromBase64(LessNumbers.toBase64(val)));
val = val.add(BigInteger.ONE);
assertEquals(val, LessNumbers.bigIntegerFromBase36(LessNumbers.toBase36(val)));
assertEquals(val, LessNumbers.bigIntegerFromBase64(LessNumbers.toBase64(val)));
val = val.shiftLeft(64);
val = val.add(BigInteger.valueOf(Long.MAX_VALUE));
assertEquals(val, LessNumbers.bigIntegerFromBase36(LessNumbers.toBase36(val)));
assertEquals(val, LessNumbers.bigIntegerFromBase64(LessNumbers.toBase64(val)));
}
public void testUUID() {
Random random = new Random();
for(int i = 0; i < 1_000_000; i++) {
long hiBits = random.nextLong();
long loBits = random.nextLong();
UUID uuid = new UUID(hiBits, loBits);
assertEquals(uuid, LessNumbers.UUIDFromBase64(LessNumbers.toBase64(uuid)));
}
}
public void testA() {
assertEquals(0, LessNumbers.intFromBase64("000000"));
assertEquals(1, LessNumbers.intFromBase64("000001"));
assertEquals(630880809, LessNumbers.intFromBase64("ABCDEF"));
}
}