Subversion Repositories distributed

Rev

Rev 13 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. package de.viathinksoft.immortal.gen2.math;
  2.  
  3. import static org.junit.Assert.*;
  4.  
  5. import java.math.BigInteger;
  6.  
  7. import org.junit.Test;
  8.  
  9. import de.viathinksoft.immortal.gen2.math.CRTNotSolveableException;
  10. import de.viathinksoft.immortal.gen2.math.MathUtils2;
  11. import de.viathinksoft.immortal.gen2.math.RemainderNotSmallerThanModulusException;
  12.  
  13. public class MathUtils2Test {
  14.        
  15.         @Test
  16.         public void powTest() {
  17.                 BigInteger x = new BigInteger("123");
  18.                
  19.                 for (int y=-3; y<0; y++) {
  20.                         try {
  21.                                 MathUtils2.pow(x, new BigInteger(""+y));
  22.                                 fail();
  23.                         } catch (ArithmeticException e) {
  24.                         }
  25.                 }
  26.                
  27.                 for (int y=0; y<=3; y++) {
  28.                         assertEquals(
  29.                                         x.pow(y),
  30.                                         MathUtils2.pow(x, new BigInteger(""+y))
  31.                         );
  32.                 }
  33.         }
  34.  
  35.         /**
  36.          * @throws CRTNotSolveableException
  37.          * @throws RemainderNotSmallerThanModulusException
  38.          */
  39.  
  40.         @Test
  41.         public void chineseRemainderTest() throws CRTException {
  42.                 BigInteger x;
  43.                
  44.                 // 45 2 65 3 -> Rest muss kleiner sein als Modul
  45.                 try {
  46.                         x = MathUtils2.chineseRemainder(new BigInteger("45"),
  47.                                         new BigInteger("2"), new BigInteger("65"), new BigInteger(
  48.                                                         "3"));
  49.                         fail();
  50.                 } catch (RemainderNotSmallerThanModulusException e) {
  51.                 }
  52.  
  53.                 // 1 8 0 125 -> 625
  54.                 x = MathUtils2
  55.                                 .chineseRemainder(new BigInteger("1"), new BigInteger("8"),
  56.                                                 new BigInteger("0"), new BigInteger("125"));
  57.                 assertEquals(new BigInteger("625"), x);
  58.  
  59.                 // 1 2 0 4 -> Keine Lösung
  60.                 try {
  61.                         x = MathUtils2.chineseRemainder(new BigInteger("1"),
  62.                                         new BigInteger("2"), new BigInteger("0"), new BigInteger(
  63.                                                         "4"));
  64.                         fail();
  65.                 } catch (CRTNotSolveableException e) {
  66.                 }
  67.  
  68.                 // 1 6 3 8 -> 19
  69.                 x = MathUtils2.chineseRemainder(new BigInteger("1"),
  70.                                 new BigInteger("6"), new BigInteger("3"), new BigInteger("8"));
  71.                 assertEquals(new BigInteger("19"), x);
  72.  
  73.                 // -1 7 -3 8 -> 43
  74.                 x = MathUtils2.chineseRemainder(new BigInteger("-1"), new BigInteger(
  75.                                 "7"), new BigInteger("-3"), new BigInteger("8"));
  76.                 assertEquals(new BigInteger("43"), x);
  77.  
  78.                 // -1 -7 -3 -8 -> 43
  79.                 x = MathUtils2.chineseRemainder(new BigInteger("-1"), new BigInteger(
  80.                                 "-7"), new BigInteger("-3"), new BigInteger("-8"));
  81.                 assertEquals(new BigInteger("43"), x);
  82.  
  83.                 // 1 -7 3 -8 -> 43
  84.                 x = MathUtils2.chineseRemainder(new BigInteger("1"), new BigInteger(
  85.                                 "-7"), new BigInteger("3"), new BigInteger("-8"));
  86.                 assertEquals(new BigInteger("43"), x);
  87.         }
  88. }
  89.