/** Test of rightShiftBuffer method, of class FidelDecoder. */
 public void testRightShiftBuffer() {
   System.out.println("rightShiftBuffer");
   int[] buf = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0};
   int shift = 2;
   int at = 6;
   FidelDecoder.rightShiftBuffer(buf, shift, at);
   Assert.assertArrayEquals(new int[] {1, 2, 3, 4, 5, 6, 7, 6, 7, 8, 9}, buf);
   final int[] buf2 = new int[] {7, 9, 0};
   FidelDecoder.rightShiftBuffer(buf2, 1, 1);
   Assert.assertArrayEquals(new int[] {7, 9, 9}, buf2);
 }
 /** Test of recalcDist method, of class FidelDecoder. */
 @Test
 public void testRecalcDist() {
   System.out.println("recalcDist");
   int[] dist = {0, 0, -1, 1, 0};
   int length = 2;
   int shift = 2;
   int[] expResult = {0, 0, -1, -2, -2, 3, 2};
   int[] result = FidelDecoder.recalcDist(dist, length, shift);
   assertArrayEquals(expResult, result);
   assertArrayEquals(new int[] {-2, 1, 1}, FidelDecoder.recalcDist(new int[] {0, 0}, 1, 2));
 }
 /** Test of tryPutTranslation method, of class FidelDecoder. */
 @Test
 public void testTryPutTranslation_7args() {
   System.out.println("tryPutTranslation");
   PhraseTranslation pt =
       new PhraseTranslation(
           new int[] {6},
           new double[] {
             log10(0.474756), log10(0.427108), log10(0.128955), log10(0.144797), log10(2.718)
           });
   double[] weights = {1, 1, 1, 1, 1, 1, 1, 1};
   int[] buf = new int[2];
   int pos = 0;
   IntegerLanguageModelImpl languageModel = lm;
   int lmN = 2;
   int dist = 0;
   double expResult =
       log10(0.474756)
           + log10(0.427108)
           + log10(0.128955)
           + log10(0.144797)
           + log10(2.718)
           - 3.320179;
   double result =
       FidelDecoder.tryPutTranslation(pt, weights, buf, pos, languageModel, lmN, dist)[0];
   assertEquals(expResult, result, 0.001);
 }
 /** Test of lmScore method, of class FidelDecoder. */
 public void testLmScoreDirect() {
   System.out.println("lmScore");
   int[] buf = {6, 9, 12};
   IntegerLanguageModelImpl languageModel = lm;
   int lmN = 2;
   assertEquals(
       -2.74139, FidelDecoder.lmScore(buf, 2, languageModel, lmN, Double.NEGATIVE_INFINITY), 0.01);
 }
 @Test
 public void testDeltaDist() {
   System.out.println("deltaDist");
   int[] dist = {0, 0, -1, 1, 0};
   int length = 2;
   int shift = 2;
   double[] weights = {1, 1, 1, 1, 1, 1, 1, 1};
   double result = FidelDecoder.deltaDist(dist, length, shift, weights);
   assertEquals(-8, result, 0.0);
 }
 /** Test of leftShiftBuffer method, of class FidelDecoder. */
 @Test
 public void testLeftShiftBuffer() {
   System.out.println("leftShiftBuffer");
   int[] buf = {1, 2, 3, 4, 5, 6, 7, 6, 7, 8, 9};
   int shift = 2;
   int at = 6;
   FidelDecoder.leftShiftBuffer(buf, shift, at);
   int[] expResult = {1, 2, 3, 4, 5, 6, 7, 8, 9, 8, 9};
   assertArrayEquals(expResult, buf);
 }
 /** Test of calcPartialScore method, of class FidelDecoder. */
 @Test
 public void testCalcPartialScore() {
   System.out.println("calcPartialScore");
   int[] src = {0, 1, 2, 3, 4, 5};
   Object2ObjectMap<Phrase, Collection<PhraseTranslation>> phraseTable = pt;
   double[] weights = {1, 1, 1, 1, 1, 1, 1, 1};
   IntegerLanguageModelImpl languageModel = lm;
   int lmN = 2;
   double[] expResult = {-5.3066, -7.6801, -6.2073, -3.5574, -5.0824, -7.3064};
   double[] result = FidelDecoder.calcPartialScore(src, phraseTable, weights, languageModel, lmN);
   assertArrayEquals(expResult, result, 0.01);
 }
 /** Test of decode method, of class FidelDecoder. */
 public void testDecode() {
   System.out.println("decode");
   int[] src = {0, 1, 2, 3, 4, 5};
   Object2ObjectMap<Phrase, Collection<PhraseTranslation>> phraseTable = pt;
   IntegerLanguageModelImpl languageModel = lm;
   int lmN = 2;
   double[] weights = new double[] {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
   int distiortionLimit = 3;
   int nBest = 1;
   Solution[] result =
       FidelDecoder.decode(
           src, phraseTable, languageModel, lmN, weights, distiortionLimit, nBest, 1000, false);
   final int[] expSoln = new int[] {7, 9, 16, 11};
   System.out.println("My Guess:" + Arrays.toString(expSoln));
   System.out.println("Fidel's soln: " + Arrays.toString(result[0].soln()));
   //        assertArrayEquals(expSoln, result[0].soln);
 }
 public void testFeatures() {
   System.out.println("decode");
   int[] src = {0, 1, 2, 3, 4, 5};
   Object2ObjectMap<Phrase, Collection<PhraseTranslation>> phraseTable = pt;
   IntegerLanguageModelImpl languageModel = lm;
   int lmN = 2;
   double[] weights = new double[] {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
   int distiortionLimit = 3;
   int nBest = 1;
   Solution[] result =
       FidelDecoder.decode(
           src, phraseTable, languageModel, lmN, weights, distiortionLimit, nBest, 1000, false);
   for (int j = 0; j < result.length; j++) {
     double scoreFromFeats = 0.0;
     for (int i = 0; i < weights.length; i++) {
       scoreFromFeats += result[j].features()[i];
     }
     assertEquals(result[j].score(), scoreFromFeats, 0.0001);
   }
 }
 public void testDecodeSimple() {
   System.out.println("decodeSimple");
   int[] src = {0, 1, 2};
   Object2ObjectMap<Phrase, Collection<PhraseTranslation>> phraseTable =
       new Object2ObjectOpenHashMap<Phrase, Collection<PhraseTranslation>>();
   phraseTable.put(
       new Phrase(new int[] {0}),
       Arrays.asList(new PhraseTranslation(new int[] {3}, new double[] {-1})));
   phraseTable.put(
       new Phrase(new int[] {1}),
       Arrays.asList(new PhraseTranslation(new int[] {4}, new double[] {-1})));
   phraseTable.put(
       new Phrase(new int[] {2}),
       Arrays.asList(new PhraseTranslation(new int[] {5}, new double[] {-1})));
   final IntegerLanguageModelImpl languageModel = new IntegerLanguageModelImpl();
   languageModel.put(new Phrase(new int[] {3}), new double[] {-1, -10});
   languageModel.put(new Phrase(new int[] {4}), new double[] {-1, -10});
   languageModel.put(new Phrase(new int[] {5}), new double[] {-1, -10});
   languageModel.put(
       new Phrase(new int[] {3, 4}),
       new double[] {
         -1,
       });
   languageModel.put(
       new Phrase(new int[] {4, 5}),
       new double[] {
         -1,
       });
   int lmN = 2;
   double[] weights = new double[] {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0};
   int distiortionLimit = 3;
   int nBest = 1;
   Solution[] result =
       FidelDecoder.decode(
           src, phraseTable, languageModel, lmN, weights, distiortionLimit, nBest, 1000, false);
   assertArrayEquals(new int[] {3, 4, 5}, result[0].soln());
   assertEquals(-6, result[0].score(), 0.01);
 }