package org.freehep.util.test;
import java.util.Random;
import junit.framework.*;
import org.freehep.util.ScientificFormat;
import org.freehep.util.DoubleWithError;
/**
*
* @author Mark Donszelmann
* @version $Id: ScientificFormatTest.java 8584 2006-08-10 23:06:37Z duns $
*/
public class ScientificFormatTest extends TestCase
{
public ScientificFormatTest(java.lang.String testName)
{
super(testName);
}
public static Test suite()
{
TestSuite suite = new TestSuite(ScientificFormatTest.class);
return suite;
}
/**
* Test of versionNumberCompare method, of class org.freehep.util.VersionComparator.
*/
public void testScientificFormatCompare()
{
ScientificFormat f = new ScientificFormat();
assertEquals("1.0000", f.format(1.0));
assertEquals(".10000", f.format(1E-1));
assertEquals(".010000", f.format(1E-2));
assertEquals(".0010000", f.format(1E-3));
assertEquals("1.0000E-4", f.format(1E-4));
assertEquals("1.0000E-5", f.format(1E-5));
assertEquals("1.0000E-6", f.format(1E-6));
assertEquals("10.000", f.format(1E1));
assertEquals("100.00", f.format(1E2));
assertEquals("1000.0", f.format(1E3));
assertEquals("10000", f.format(1E4));
assertEquals("100000", f.format(1E5));
assertEquals("1000000", f.format(1E6));
assertEquals("10000000", f.format(1E7));
assertEquals("1.0000E8", f.format(1E8));
assertEquals("1000000", f.format(999999));
assertEquals("99999", f.format(99999));
assertEquals("9999.0", f.format(9999));
assertEquals("999.00", f.format(999));
assertEquals("99.000", f.format(99));
assertEquals("9.0000", f.format(9));
assertEquals(".90000", f.format(.9));
assertEquals(".090000", f.format(.09));
assertEquals("1000.0", f.format(999.999));
assertEquals("100000", f.format(100000.000001));
assertEquals("100000", f.format(100000.0000001));
assertEquals("100000", f.format(100000.00000001));
assertEquals("100000", f.format(100000.000000001));
assertEquals("100000", f.format(100000.0000000001));
assertEquals("100000", f.format(100000.00000000001));
assertEquals("-1.0000", f.format(-1.0));
assertEquals("-.10000", f.format(-1E-1));
assertEquals("-.010000", f.format(-1E-2));
assertEquals("-.0010000", f.format(-1E-3));
assertEquals("-1.0000E-4", f.format(-1E-4));
assertEquals("-1.0000E-5", f.format(-1E-5));
assertEquals("-1.0000E-6", f.format(-1E-6));
assertEquals("-10.000", f.format(-1E1));
assertEquals("-100.00", f.format(-1E2));
assertEquals("-1000.0", f.format(-1E3));
assertEquals("-10000", f.format(-1E4));
assertEquals("-100000", f.format(-1E5));
assertEquals("-1000000", f.format(-1E6));
assertEquals("-10000000", f.format(-1E7));
assertEquals("-1.0000E8", f.format(-1E8));
assertEquals("-1000000", f.format(-999999));
assertEquals("-99999", f.format(-99999));
assertEquals("-9999.0", f.format(-9999));
assertEquals("-999.00", f.format(-999));
assertEquals("-99.000", f.format(-99));
assertEquals("-9.0000", f.format(-9));
assertEquals("-.90000", f.format(-.9));
assertEquals("-.090000", f.format(-.09));
assertEquals("-1000.0", f.format(-999.999));
assertEquals("-100000", f.format(-100000.000001));
assertEquals("-100000", f.format(-100000.0000001));
assertEquals("-100000", f.format(-100000.00000001));
assertEquals("-100000", f.format(-100000.000000001));
assertEquals("-100000", f.format(-100000.0000000001));
assertEquals("-100000", f.format(-100000.00000000001));
assertEquals("0.0000", f.format(-0));
Random r = new Random();
for (int i=0; i<10000; i++)
{
double d = r.nextDouble();
String sd = f.format(d);
double d2 = Double.parseDouble(sd);
assertEquals(d,d2,d*1e-4);
}
for (int i=0; i<10000; i++)
{
long l = r.nextLong();
double d = Double.longBitsToDouble(l);
String sd = f.format(d);
double d2 = Double.parseDouble(sd);
if (Double.isNaN(d)) assertTrue(Double.isNaN(d2));
else if (Double.isInfinite(d)) assertTrue(Double.isInfinite(d2));
else assertEquals(d,d2,Math.abs(d)*1e-4);
}
}
public void testDoubleWitheErrorCompare()
{
ScientificFormat f = new ScientificFormat();
char plusorminus = '\u00b1';
DoubleWithError de = new DoubleWithError(1,.01);
assertEquals("1.0000"+plusorminus+".0100",f.format(de));
}
public static void main(java.lang.String[] args)
{
junit.textui.TestRunner.run(suite());
}
}