public void GetPositionsAndRefAltAlleles_AsExpected() { var genotypeBlock = new GenotypeBlock(new[] { "1|2", "1/1", "0|1", "0/1" }.Select(Genotype.GetGenotype).ToArray()); var genotypeToSample = new Dictionary <GenotypeBlock, List <int> > { { genotypeBlock, new List <int> { 0 } } }; var indexOfUnsupportedVars = Enumerable.Repeat(new HashSet <int>(), genotypeBlock.Genotypes.Length).ToArray(); var starts = new[] { 356, 358, 360, 361 }; var functionBlockRanges = new List <int> { 358, 360, 362, 364 }; var alleles = new[] { new[] { "G", "C", "T" }, new[] { "A", "T" }, new[] { "C", "G" }, new[] { "G", "T" } }; const string refSequence = "GAATCG"; var alleleBlockToSampleHaplotype = AlleleBlock.GetAlleleBlockToSampleHaplotype(genotypeToSample, indexOfUnsupportedVars, starts, functionBlockRanges, out var alleleBlockGraph); var mergedAlleleBlockToSampleHaplotype = AlleleBlockMerger.Merge(alleleBlockToSampleHaplotype, alleleBlockGraph).ToArray(); var alleleSet = new AlleleSet(ChromosomeUtilities.Chr1, starts, alleles); var alleleBlocks = mergedAlleleBlockToSampleHaplotype.Select(x => x.Key).ToArray(); var sequence = new NSequence(); var result1 = VariantGenerator.GetPositionsAndRefAltAlleles(alleleBlocks[0], alleleSet, refSequence, starts[0], null, sequence, _vidCreator); var result2 = VariantGenerator.GetPositionsAndRefAltAlleles(alleleBlocks[1], alleleSet, refSequence, starts[0], null, sequence, _vidCreator); var expectedVarPosIndexes1 = new List <int> { 0, 1 }; var expectedVarPosIndexes2 = new List <int> { 0, 1, 2 }; Assert.Equal((356, 360, "GAATC", "CATTC"), (result1.Start, result1.End, result1.Ref, result1.Alt)); for (var i = 0; i < expectedVarPosIndexes1.Count; i++) { Assert.Equal(expectedVarPosIndexes1[i], result1.VarPosIndexesInAlleleBlock[i]); } Assert.Equal((356, 360, "GAATC", "TATTG"), (result2.Start, result2.End, result2.Ref, result2.Alt)); for (var i = 0; i < expectedVarPosIndexes2.Count; i++) { Assert.Equal(expectedVarPosIndexes2[i], result2.VarPosIndexesInAlleleBlock[i]); } }
public void Merge_AsExpected() { var genotypeBlock1 = new GenotypeBlock(new[] { "1|0", "1|1", "1|1" }.Select(Genotype.GetGenotype).ToArray()); var genotypeBlock2 = new GenotypeBlock(new[] { "0|0", "1|0", "1|1" }.Select(Genotype.GetGenotype).ToArray()); var genotypeToSample = new Dictionary <GenotypeBlock, List <int> > { { genotypeBlock1, new List <int> { 0 } }, { genotypeBlock2, new List <int> { 1 } } }; var indexOfUnsupportedVars = Enumerable.Repeat(new HashSet <int>(), 3).ToArray(); var starts = Enumerable.Range(100, 3).ToArray(); var functionBlockRanges = starts.Select(x => x + 2).ToList(); var alleleBlockToSampleHaplotype = AlleleBlock.GetAlleleBlockToSampleHaplotype(genotypeToSample, indexOfUnsupportedVars, starts, functionBlockRanges, out var alleleBlockGraph); var mergedAlleleBlockToSampleHaplotype = AlleleBlockMerger.Merge(alleleBlockToSampleHaplotype, alleleBlockGraph); var expectedBlock1 = new AlleleBlock(0, new[] { 1, 1, 1 }, -1, -1); var expectedBlock2 = new AlleleBlock(0, new[] { 0, 1, 1 }, -1, -1); var expectedBlock3 = new AlleleBlock(0, new[] { 0, 0, 1 }, -1, -1); Assert.True(mergedAlleleBlockToSampleHaplotype.ContainsKey(expectedBlock1)); Assert.True(mergedAlleleBlockToSampleHaplotype[expectedBlock1] .SequenceEqual(new[] { new SampleHaplotype(0, 0) })); Assert.True(mergedAlleleBlockToSampleHaplotype.ContainsKey(expectedBlock2)); Assert.True(mergedAlleleBlockToSampleHaplotype[expectedBlock2] .SequenceEqual(new[] { new SampleHaplotype(0, 1), new SampleHaplotype(1, 0) })); Assert.True(mergedAlleleBlockToSampleHaplotype.ContainsKey(expectedBlock3)); Assert.True(mergedAlleleBlockToSampleHaplotype[expectedBlock3] .SequenceEqual(new[] { new SampleHaplotype(1, 1) })); }