public final void testCodonToAmino() {
    final Map<Protein, SortedSet<String>> map = new TreeMap<>();
    for (final DNA c1 : DNA.values()) {
      for (final DNA c2 : DNA.values()) {
        for (final DNA c3 : DNA.values()) {
          final String s = "" + c1 + c2 + c3;
          final Protein pr = TranslatedFrame.codonToAmino(c1, c2, c3);
          if (c1.ignore() || c2.ignore()) {
            assertTrue(s + ":" + pr, pr.ignore());
          } else {
            final SortedSet<String> set = map.get(pr);
            final SortedSet<String> ns;
            if (set == null) {
              ns = new TreeSet<>();
              map.put(pr, ns);
            } else {
              ns = set;
            }
            ns.add(s);
          }
        }
      }
    }

    final StringBuilder sb = new StringBuilder();
    for (final Map.Entry<Protein, SortedSet<String>> e : map.entrySet()) {
      final Protein pr = e.getKey();
      final SortedSet<String> set = e.getValue();
      sb.append(pr.threeLetter()).append("/").append(pr.toString()).append(" ");
      int i = 0;
      for (final String s : set) {
        if (i > 0) {
          sb.append(", ");
        }
        sb.append(s);
        i++;
      }
      sb.append(LS);
    }
    assertEquals(CODON_TABLE, sb.toString());
  }