public void EnumFixTranspositionTests()
{
var orig1 = "acc";
var ent1 = "cca";
var al1 = LongestCommonSubsequence.LeftAlignedLCS(orig1, ent1);
var ad1 = LongestCommonSubsequence.GetAddedCharIndices(ent1, al1);
var om1 = LongestCommonSubsequence.GetMissingCharIndices(orig1, al1);
var fix1 = LongestCommonSubsequence.FixTranspositions(al1, ad1, om1, orig1, ent1);
Assert.AreEqual(orig1, fix1.Item1);
Tuple<int, int>[] correct_alignments = { new Tuple<int, int>(0, 0), new Tuple<int, int>(1, 1), new Tuple<int, int>(2, 2) };
Assert.AreEqual(true, correct_alignments.SequenceEqual<Tuple<int, int>>(fix1.Item2));
int [] correct_additions = {};
Assert.AreEqual(true, correct_additions.SequenceEqual<int>(fix1.Item3));
int[] correct_omissions = { };
Assert.AreEqual(true, correct_omissions.SequenceEqual<int>(fix1.Item4));
Assert.AreEqual(2, fix1.Item5.Head);
var orig2 = "acc";
var ent2 = "cac";
// this line is to avoid nondeterministic choice of alignments
Tuple<int, int>[] al2_a = { new Tuple<int, int>(0, 1), new Tuple<int, int>(2, 2) };
var al2 = LongestCommonSubsequence.ToFSList(al2_a);
var ad2 = LongestCommonSubsequence.GetAddedCharIndices(ent2, al2);
var om2 = LongestCommonSubsequence.GetMissingCharIndices(orig2, al2);
var fix2 = LongestCommonSubsequence.FixTranspositions(al2, ad2, om2, orig2, ent2);
Assert.AreEqual(orig2, fix2.Item1);
Tuple<int, int>[] correct_alignments2 = { new Tuple<int, int>(0, 0), new Tuple<int, int>(1, 1), new Tuple<int, int>(2, 2) };
Assert.AreEqual(true, correct_alignments2.SequenceEqual<Tuple<int, int>>(fix2.Item2));
int[] correct_additions2 = { };
Assert.AreEqual(true, correct_additions2.SequenceEqual<int>(fix2.Item3));
int[] correct_omissions2 = { };
Assert.AreEqual(true, correct_omissions2.SequenceEqual<int>(fix2.Item4));
Assert.AreEqual(-1, fix2.Item5.Head);
var orig3 = "cac";
var ent3 = "acc";
// this line is to avoid nondeterministic choice of alignments
Tuple<int, int>[] al3_a = { new Tuple<int, int>(0, 1), new Tuple<int, int>(2, 2) };
var al3 = LongestCommonSubsequence.ToFSList(al3_a);
var ad3 = LongestCommonSubsequence.GetAddedCharIndices(ent3, al3);
var om3 = LongestCommonSubsequence.GetMissingCharIndices(orig3, al3);
var fix3 = LongestCommonSubsequence.FixTranspositions(al3, ad3, om3, orig3, ent3);
Assert.AreEqual(orig3, fix3.Item1);
Tuple<int, int>[] correct_alignments3 = { new Tuple<int, int>(0, 0), new Tuple<int, int>(1, 1), new Tuple<int, int>(2, 2) };
Assert.AreEqual(true, correct_alignments3.SequenceEqual<Tuple<int, int>>(fix2.Item2));
int[] correct_additions3 = { };
Assert.AreEqual(true, correct_additions3.SequenceEqual<int>(fix2.Item3));
int[] correct_omissions3 = { };
Assert.AreEqual(true, correct_omissions3.SequenceEqual<int>(fix2.Item4));
Assert.AreEqual(-1, fix3.Item5.Head);
}