001 /* 002 * $Id: BigDecimalTest.java 2194 2008-10-19 12:26:47Z kredel $ 003 */ 004 005 package edu.jas.arith; 006 007 import java.math.MathContext; 008 009 import junit.framework.Test; 010 import junit.framework.TestCase; 011 import junit.framework.TestSuite; 012 013 //import edu.jas.arith.BigDecimal; 014 015 016 /** 017 * BigDecimal tests with JUnit. 018 * @author Heinz Kredel. 019 */ 020 021 public class BigDecimalTest extends TestCase { 022 023 /** 024 * main. 025 */ 026 public static void main (String[] args) { 027 junit.textui.TestRunner.run( suite() ); 028 } 029 030 /** 031 * Constructs a <CODE>BigDecimalTest</CODE> object. 032 * @param name String. 033 */ 034 public BigDecimalTest(String name) { 035 super(name); 036 } 037 038 /** 039 */ 040 public static Test suite() { 041 TestSuite suite= new TestSuite(BigDecimalTest.class); 042 return suite; 043 } 044 045 BigDecimal a; 046 BigDecimal b; 047 BigDecimal c; 048 BigDecimal d; 049 BigDecimal e; 050 BigDecimal fac; 051 052 int kl = 100; 053 int precision = 100; // must match default 054 MathContext mc = new MathContext( precision ); 055 056 protected void setUp() { 057 a = b = c = d = e = null; 058 fac = new BigDecimal(0L,mc); 059 } 060 061 protected void tearDown() { 062 a = b = c = d = e = null; 063 fac = null; 064 } 065 066 067 /** 068 * Test static initialization and constants. 069 * 070 */ 071 public void testConstants() { 072 a = BigDecimal.ZERO; 073 b = BigDecimal.ONE; 074 c = b.subtract(b); 075 076 assertTrue("1-1 = 0",c.compareTo(a)==0); 077 assertTrue("1-1 = 0",c.isZERO()); 078 assertTrue("1 = 1", b.isONE() ); 079 080 a = BigDecimal.ZERO; 081 b = BigDecimal.ONE; 082 c = b.subtract(b); 083 084 assertTrue("1-1 = 0",c.compareTo(a)==0); 085 } 086 087 088 /** 089 * Test constructor and toString. 090 * 091 */ 092 public void testConstructor() { 093 a = new BigDecimal( "6.8" ); 094 b = new BigDecimal( "3.4" ); 095 b = b.sum(b); 096 097 assertEquals("6.8 = 3.4",0,a.compareTo(b)); 098 099 String s = "6.1111111111111111111111111111111111111111111"; 100 a = new BigDecimal( s ); 101 String t = a.toString(); 102 103 assertEquals("stringConstr = toString",s,t); 104 105 a = new BigDecimal( 1 ); 106 b = new BigDecimal( -1 ); 107 c = b.sum(a); 108 109 assertTrue("1 = 1", a.isONE() ); 110 assertTrue("1+(-1) = 0", c.compareTo(BigDecimal.ZERO)==0 ); 111 assertTrue("1+(-1) = 0", c.isZERO() ); 112 } 113 114 115 /** 116 * Test random rationals. 117 * 118 */ 119 public void testRandom() { 120 a = fac.random( 5*kl ); 121 //System.out.println("a = " + a); 122 b = new BigDecimal( "" + a ); 123 c = a.subtract(a); 124 125 //System.out.println("c = " + c); 126 //assertTrue("a-b = 0", c.compareTo(BigDecimal.ZERO)==0 ); 127 assertTrue("a-b = 0", c.isZERO() ); 128 129 d = new BigDecimal( "" + b ); 130 //System.out.println("b = " + b); 131 //System.out.println("d = " + d); 132 assertTrue("sign(a-a) = 0", b.compareTo(d)==0 ); 133 } 134 135 136 /** 137 * Test addition. 138 * 139 */ 140 public void testAddition() { 141 a = fac.random( kl ); 142 b = a.sum( a ); 143 c = b.subtract( a ); 144 //System.out.println("a = " + a); 145 //System.out.println("b = " + b); 146 //System.out.println("c = " + c); 147 148 //assertEquals("a+a-a = a", c, a); 149 assertEquals("a+a-a = a",0,c.compareTo(a)); 150 151 d = a.sum( BigDecimal.ZERO ); 152 assertEquals("a+0 = a",0,d.compareTo(a)); 153 d = a.subtract( BigDecimal.ZERO ); 154 assertEquals("a-0 = a",0,d.compareTo(a)); 155 d = a.subtract( a ); 156 assertTrue("a-a = 0", d.compareTo(BigDecimal.ZERO)==0); 157 158 b = fac.random( kl ); 159 c = a.sum( b ); 160 d = b.sum( a ); 161 assertTrue("a-b = b+a", d.compareTo(c)==0 ); 162 163 // addition is not associative 164 } 165 166 167 /** 168 * Test multiplication. 169 * Is not associative. 170 */ 171 public void testMultiplication() { 172 a = fac.random( kl ); 173 b = a.multiply( a ); 174 c = b.divide( a ); 175 //System.out.println("a = " + a); 176 //System.out.println("b = " + b); 177 //System.out.println("c = " + c); 178 179 //assertEquals("a*a/a = a",c,a); 180 assertTrue("a*a/a = a", c.compareTo(a)==0 ); 181 182 d = a.multiply( BigDecimal.ONE ); 183 assertEquals("a*1 = a",d,a); 184 d = a.divide( BigDecimal.ONE ); 185 assertEquals("a/1 = a",0,d.compareTo(a)); 186 187 a = fac.random( kl ); 188 b = a.inverse(); 189 c = a.multiply( b ); 190 //System.out.println("c = " + c); 191 assertTrue("a*1/a = 1", c.compareTo( fac.getONE() ) == 0 ); 192 193 b = fac.random( kl ); 194 c = a.multiply( b ); 195 d = b.multiply( a ); 196 //System.out.println("c = " + c); 197 //System.out.println("d = " + d); 198 assertTrue("ab = ba",d.compareTo(c)==0); 199 200 c = fac.random( kl ); 201 d = a.multiply( b.multiply( c ) ); 202 e = a.multiply( b ).multiply( c ); 203 //System.out.println("d = " + d); 204 //System.out.println("e = " + e); 205 if ( d.compareTo(e) == 0 ) { 206 assertTrue("a(bc) = (ab)c",d.compareTo(e)==0); 207 } 208 } 209 210 211 /** 212 * Test distributive law. 213 * Does not hold. 214 */ 215 public void testDistributive() { 216 a = fac.random( kl ); 217 b = fac.random( kl ); 218 c = fac.random( kl ); 219 220 d = a.multiply( b.sum( c ) ); 221 e = a.multiply( b ).sum( a.multiply( c ) ); 222 if ( d.compareTo(e) == 0 ) { 223 assertTrue("a(b+c) = ab+ac",d.compareTo(e)==0); 224 } 225 } 226 227 }