/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
// www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////
package org.projectforge.common;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import java.math.BigDecimal;
import java.util.Locale;
import org.junit.Test;
import org.projectforge.user.PFUserContext;
import org.projectforge.user.PFUserDO;
public class NumberHelperTest
{
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(NumberHelperTest.class);
@Test
public void greaterZero()
{
assertEquals(false, NumberHelper.greaterZero((Integer) null));
assertEquals(false, NumberHelper.greaterZero(-1));
assertEquals(false, NumberHelper.greaterZero(0));
assertEquals(true, NumberHelper.greaterZero(1));
assertEquals(true, NumberHelper.greaterZero(100));
}
@Test
public void add()
{
assertEquals("0", NumberHelper.add(null, null).toString());
assertEquals("1", NumberHelper.add(BigDecimal.ONE, null).toString());
assertEquals("1", NumberHelper.add(null, BigDecimal.ONE).toString());
assertEquals("11", NumberHelper.add(BigDecimal.TEN, BigDecimal.ONE).toString());
}
@Test
public void extractPhonenumber()
{
assertEquals(null, NumberHelper.extractPhonenumber(null, null));
assertEquals("", NumberHelper.extractPhonenumber("", "+49"));
assertEquals("", NumberHelper.extractPhonenumber("+", "+49"));
assertEquals("4", NumberHelper.extractPhonenumber("+4", "+49"));
assertEquals("0", NumberHelper.extractPhonenumber("+49", "+49"));
assertEquals("01", NumberHelper.extractPhonenumber("+491", "+49"));
assertEquals("05613167930", NumberHelper.extractPhonenumber("0561 / 316793-0", null));
assertEquals("00495613167930", NumberHelper.extractPhonenumber("+49 561 / 316793-0", null));
assertEquals("05613167930", NumberHelper.extractPhonenumber("+49 561 / 316793-0", "+49"));
assertEquals("00445613167930", NumberHelper.extractPhonenumber("+44 561 / 316793-0", "+49"));
assertEquals("004456131", NumberHelper.extractPhonenumber("+44 561 / 31:6793-0", "+49"));
assertEquals("004456131", NumberHelper.extractPhonenumber("+44 561 / 31 h6793-0", "+49"));
}
@Test
public void splitToInts()
{
compareIntArray(new int[] { 1, 111, 5, 11}, NumberHelper.splitToInts(11110511, 1, 3, 2, 2));
compareIntArray(new int[] { 1, 0, 5, 11}, NumberHelper.splitToInts(10000511, 1, 3, 2, 2));
compareIntArray(new int[] { 0, 0, 5, 11}, NumberHelper.splitToInts(511, 1, 3, 2, 2));
compareIntArray(new int[] { 0, 0, 5, 11}, NumberHelper.splitToInts(511, 1, 3, 2, 2));
compareIntArray(new int[] { 5, 120, 1, 2}, NumberHelper.splitToInts(new Double("51200102"), 1, 3, 2, 2));
}
@Test
public void toPlainString()
{
assertEquals("20070206001", NumberHelper.toPlainString("2.0070206001E10"));
assertEquals("", NumberHelper.toPlainString(""));
assertEquals(" ", NumberHelper.toPlainString(" "));
assertEquals("1", NumberHelper.toPlainString("1"));
assertEquals("hallo1", NumberHelper.toPlainString("hallo1"));
}
@Test
public void isBigDecimalEqual()
{
assertEquals(true, NumberHelper.isEqual((BigDecimal) null, (BigDecimal) null));
assertEquals(false, NumberHelper.isEqual(null, BigDecimal.ZERO));
assertEquals(false, NumberHelper.isEqual(BigDecimal.ZERO, null));
assertEquals(true, NumberHelper.isEqual(BigDecimal.ZERO, new BigDecimal("0.0")));
assertEquals(true, NumberHelper.isEqual(new BigDecimal("1.5").setScale(1), new BigDecimal("1.50").setScale(2)));
assertEquals(true, NumberHelper.isEqual(new BigDecimal("-891.5").setScale(1), new BigDecimal("-891.50").setScale(2)));
}
@Test
public void isIntegerNotZero()
{
assertEquals(false, NumberHelper.isNotZero((Integer)null));
assertEquals(false, NumberHelper.isNotZero(0));
assertEquals(true, NumberHelper.isNotZero(1));
}
@Test
public void isBigDecimalNotZero()
{
assertEquals(false, NumberHelper.isNotZero((BigDecimal)null));
assertEquals(false, NumberHelper.isNotZero(BigDecimal.ZERO));
assertEquals(false, NumberHelper.isNotZero(new BigDecimal("0").setScale(3)));
assertEquals(true, NumberHelper.isNotZero(new BigDecimal("1")));
}
@Test
public void isBigDecimalZeroOrNull()
{
assertEquals(true, NumberHelper.isZeroOrNull((BigDecimal)null));
assertEquals(true, NumberHelper.isZeroOrNull(BigDecimal.ZERO));
assertEquals(true, NumberHelper.isZeroOrNull(new BigDecimal("0").setScale(3)));
assertEquals(false, NumberHelper.isZeroOrNull(new BigDecimal("1")));
}
@Test
public void isIntegerEqual()
{
assertEquals(true, NumberHelper.isEqual((Integer) null, (Integer) null));
assertEquals(false, NumberHelper.isEqual(null, 0));
assertEquals(false, NumberHelper.isEqual(0, null));
assertEquals(true, NumberHelper.isEqual(0, 0));
assertEquals(true, NumberHelper.isEqual(new Integer(42), 42));
assertEquals(true, NumberHelper.isEqual(-891, new Integer("-891")));
}
@Test
public void formatBytes()
{
final PFUserDO user = new PFUserDO();
user.setLocale(Locale.UK);
PFUserContext.setUser(user);
assertEquals("0 bytes", NumberHelper.formatBytes(0));
assertEquals("1023 bytes", NumberHelper.formatBytes(1023));
assertEquals("1 kb", NumberHelper.formatBytes(1024));
assertEquals("1 kb", NumberHelper.formatBytes(1075));
assertEquals("1.1 kb", NumberHelper.formatBytes(1076));
assertEquals("99.9 kb", NumberHelper.formatBytes(102297));
assertEquals("1,023 kb", NumberHelper.formatBytes(1047552));
assertEquals("1 Mb", NumberHelper.formatBytes(1048576));
assertEquals("1 Gb", NumberHelper.formatBytes(1073741824));
}
@Test
public void setDefaultScale()
{
assertEquals(2, NumberHelper.setDefaultScale(new BigDecimal(0.76274327)).scale());
assertEquals(2, NumberHelper.setDefaultScale(new BigDecimal(19.999)).scale());
assertEquals(1, NumberHelper.setDefaultScale(new BigDecimal(20)).scale());
assertEquals(1, NumberHelper.setDefaultScale(new BigDecimal(20.000001)).scale());
assertEquals(1, NumberHelper.setDefaultScale(new BigDecimal(99.99999)).scale());
assertEquals(0, NumberHelper.setDefaultScale(new BigDecimal(100)).scale());
assertEquals(0, NumberHelper.setDefaultScale(new BigDecimal(100.000001)).scale());
assertEquals(2, NumberHelper.setDefaultScale(new BigDecimal(-0.76274327)).scale());
assertEquals(2, NumberHelper.setDefaultScale(new BigDecimal(-19.999)).scale());
assertEquals(1, NumberHelper.setDefaultScale(new BigDecimal(-20)).scale());
assertEquals(1, NumberHelper.setDefaultScale(new BigDecimal(-20.000001)).scale());
assertEquals(1, NumberHelper.setDefaultScale(new BigDecimal(-99.99999)).scale());
assertEquals(0, NumberHelper.setDefaultScale(new BigDecimal(-100)).scale());
assertEquals(0, NumberHelper.setDefaultScale(new BigDecimal(-100.000001)).scale());
}
@Test
public void randomTest()
{
for (int i = 0; i < 10; i++) {
final String randomString = NumberHelper.getSecureRandomUrlSaveString(20);
log.info(randomString);
}
for (int i = 1; i < 20; i++) {
final String randomString = NumberHelper.getSecureRandomBase64String(i);
log.info(randomString);
}
}
@Test
public void isIn() {
assertFalse(NumberHelper.isIn(42));
assertFalse(NumberHelper.isIn(42, 0));
assertTrue(NumberHelper.isIn(42, 42));
assertTrue(NumberHelper.isIn(0, 0));
assertTrue(NumberHelper.isIn(0, 1, 0));
}
private void compareIntArray(final int[] a1, final int[] a2)
{
assertEquals(a1.length, a2.length);
for (int i = 0; i < a1.length; i++) {
assertEquals(a1[i], a2[i]);
}
}
}