TEST_EQUAL(out[6].toString(),"VPQVSTPTLVEVSRSLGK")
	TEST_EQUAL(out[7].toString(),"VGTRCCTK")
	TEST_EQUAL(out[8].toString(),"PESERMPCTEDYLSLILNRLCVLHEKTPVSEKVTKCCTESLVNRR")
	TEST_EQUAL(out[9].toString(),"PCFSALTPDETYVPKAFDEKLFTFHADICTLPDTEKQIKKQTALVELLKHK")
	TEST_EQUAL(out[10].toString(),"PKATEEQLKTVMENFVAFDKCCAADDKEACFAVEGPKLVVSTQTALA")

END_SECTION


START_SECTION(( bool isValidProduct(const AASequence& protein, Size pep_pos, Size pep_length) ))
  EnzymaticDigestion ed;
  ed.setEnzyme(EnzymaticDigestion::ENZYME_TRYPSIN);
  ed.setSpecificity(EnzymaticDigestion::SPEC_FULL); // require both sides

  AASequence prot = AASequence("ABCDEFGKABCRAAAKAARPBBBB");
  TEST_EQUAL(ed.isValidProduct(prot, 100, 3), false);  // invalid position
  TEST_EQUAL(ed.isValidProduct(prot, 10, 300), false);  // invalid length
  TEST_EQUAL(ed.isValidProduct(prot, 10, 0), false);  // invalid size
  TEST_EQUAL(ed.isValidProduct(AASequence(""), 10, 0), false);  // invalid size

  TEST_EQUAL(ed.isValidProduct(prot, 0, 3), false);  // invalid N-term
  TEST_EQUAL(ed.isValidProduct(prot, 0, 8), true);   //   valid N-term
  TEST_EQUAL(ed.isValidProduct(prot, 8, 4), true);   //   valid fully-tryptic 
  TEST_EQUAL(ed.isValidProduct(prot, 8, 8), true);   //   valid fully-tryptic 
  TEST_EQUAL(ed.isValidProduct(prot, 0, 19), false);  // invalid C-term - followed by proline
  TEST_EQUAL(ed.isValidProduct(prot, 8, 3), false);  // invalid C-term
  TEST_EQUAL(ed.isValidProduct(prot, 3, 6), false);  // invalid C+N-term
  TEST_EQUAL(ed.isValidProduct(prot, 1, 7), false);  // invalid N-term
  TEST_EQUAL(ed.isValidProduct(prot, 0, prot.size()), true);  // the whole thing

  prot = AASequence("MBCDEFGKABCRAAAKAA"); // starts with Met - we assume the cleaved form without Met occurs in vivo