public BinaryDictDecoderEncoderTests(final long seed, final int maxUnigrams) {
    super();
    BinaryDictionaryUtils.setCurrentTimeForTest(0);
    Log.e(TAG, "Testing dictionary: seed is " + seed);
    final Random random = new Random(seed);
    sWords.clear();
    sWordsWithVariousCodePoints.clear();
    generateWords(maxUnigrams, random);

    for (int i = 0; i < sWords.size(); ++i) {
      sChainBigrams.put(i, new ArrayList<Integer>());
      if (i > 0) {
        sChainBigrams.get(i - 1).add(i);
      }
    }

    sStarBigrams.put(0, new ArrayList<Integer>());
    // MAX - 1 because we added one above already
    final int maxBigrams = Math.min(sWords.size(), FormatSpec.MAX_BIGRAMS_IN_A_PTNODE - 1);
    for (int i = 1; i < maxBigrams; ++i) {
      sStarBigrams.get(0).add(i);
    }

    sShortcuts.clear();
    for (int i = 0; i < NUM_OF_NODES_HAVING_SHORTCUTS; ++i) {
      final int from = Math.abs(random.nextInt()) % sWords.size();
      sShortcuts.put(sWords.get(from), new ArrayList<String>());
      for (int j = 0; j < NUM_OF_SHORTCUTS; ++j) {
        final int to = Math.abs(random.nextInt()) % sWords.size();
        sShortcuts.get(sWords.get(from)).add(sWords.get(to));
      }
    }
  }
 @Override
 protected void tearDown() throws Exception {
   // Quit test mode.
   BinaryDictionaryUtils.setCurrentTimeForTest(-1);
   super.tearDown();
 }
 @Override
 protected void setUp() throws Exception {
   super.setUp();
   BinaryDictionaryUtils.setCurrentTimeForTest(0);
 }