import static org.testng.AssertJUnit.assertFalse;
import static org.testng.AssertJUnit.assertSame;
import static org.testng.AssertJUnit.assertTrue;
+import static org.testng.AssertJUnit.fail;
+
+import java.awt.Color;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
import jalview.api.AlignViewportI;
+import jalview.bin.Cache;
import jalview.commands.EditCommand;
import jalview.commands.EditCommand.Action;
import jalview.commands.EditCommand.Edit;
import jalview.io.FileFormatI;
import jalview.io.FormatAdapter;
-import java.awt.Color;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.List;
-
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
public class MappingUtilsTest
{
+ @BeforeClass(alwaysRun = true)
+ public void setUp()
+ {
+ Cache.initLogger();
+ }
@BeforeClass(alwaysRun = true)
public void setUpJvOptionPane()
MapList map = new MapList(new int[] { 5, 10 }, new int[] { 12, 13 }, 3,
1);
acf.addMap(seq1.getDatasetSequence(), aseq1.getDatasetSequence(), map);
- List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
- { acf });
+ List<AlignedCodonFrame> acfList = Arrays
+ .asList(new AlignedCodonFrame[]
+ { acf });
/*
* Check protein residue 12 maps to codon 5-7, 13 to codon 8-10
* Map dna bases [6, 8, 9], [11, 13, 115] to protein residues 8 and 9
*/
AlignedCodonFrame acf = new AlignedCodonFrame();
- MapList map = new MapList(new int[] { 6, 6, 8, 9, 11, 11, 13, 13, 15,
- 15 }, new int[] { 8, 9 }, 3, 1);
+ MapList map = new MapList(
+ new int[]
+ { 6, 6, 8, 9, 11, 11, 13, 13, 15, 15 }, new int[] { 8, 9 }, 3,
+ 1);
acf.addMap(seq1.getDatasetSequence(), aseq1.getDatasetSequence(), map);
- List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
- { acf });
+ List<AlignedCodonFrame> acfList = Arrays
+ .asList(new AlignedCodonFrame[]
+ { acf });
/*
* Check protein residue 8 maps to [6, 8, 9]
for (int i = 5; i < 18; i++)
{
sr = MappingUtils.buildSearchResults(seq1, i, acfList);
- int residue = (i == 6 || i == 8 || i == 9) ? 8 : (i == 11 || i == 13
- || i == 15 ? 9 : 0);
+ int residue = (i == 6 || i == 8 || i == 9) ? 8
+ : (i == 11 || i == 13 || i == 15 ? 9 : 0);
if (residue == 0)
{
assertEquals(0, sr.getResults().size());
MapList map = new MapList(new int[] { 1, 3 }, new int[] { 1, 1 }, 3, 1);
for (int seq = 0; seq < 3; seq++)
{
- acf.addMap(cdna.getSequenceAt(seq).getDatasetSequence(), protein
- .getSequenceAt(seq).getDatasetSequence(), map);
+ acf.addMap(cdna.getSequenceAt(seq).getDatasetSequence(),
+ protein.getSequenceAt(seq).getDatasetSequence(), map);
}
- List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
- { acf });
+ List<AlignedCodonFrame> acfList = Arrays
+ .asList(new AlignedCodonFrame[]
+ { acf });
AlignViewportI dnaView = new AlignViewport(cdna);
AlignViewportI proteinView = new AlignViewport(protein);
protected AlignmentI loadAlignment(final String data, FileFormatI format)
throws IOException
{
- AlignmentI a = new FormatAdapter().readFile(data,
- DataSourceType.PASTE, format);
+ AlignmentI a = new FormatAdapter().readFile(data, DataSourceType.PASTE,
+ format);
a.setDataset(null);
return a;
}
cs.clear();
colsel.clear();
colsel.addElement(2);
- MappingUtils.mapColumnSelection(colsel, hidden, proteinView,
- dnaView, cs, hs);
+ MappingUtils.mapColumnSelection(colsel, hidden, proteinView, dnaView,
+ cs, hs);
assertEquals("[]", cs.getSelected().toString());
/*
cs.clear();
colsel.clear();
colsel.addElement(3);
- MappingUtils.mapColumnSelection(colsel, hidden, proteinView,
- dnaView, cs, hs);
+ MappingUtils.mapColumnSelection(colsel, hidden, proteinView, dnaView,
+ cs, hs);
assertEquals("[5, 6, 7, 8, 9, 10]", cs.getSelected().toString());
/*
colsel.clear();
colsel.addElement(1);
colsel.addElement(3);
- MappingUtils.mapColumnSelection(colsel, hidden, proteinView,
- dnaView, cs, hs);
- assertEquals("[0, 1, 2, 3, 5, 6, 7, 8, 9, 10]", cs.getSelected()
- .toString());
+ MappingUtils.mapColumnSelection(colsel, hidden, proteinView, dnaView,
+ cs, hs);
+ assertEquals("[0, 1, 2, 3, 5, 6, 7, 8, 9, 10]",
+ cs.getSelected().toString());
}
/**
// map first dna to first protein seq
AlignedCodonFrame acf = new AlignedCodonFrame();
MapList map = new MapList(new int[] { 10, 12, 15, 15, 17, 18 },
- new int[] { 40, 41 }, 3, 1);
- acf.addMap(cdna.getSequenceAt(0).getDatasetSequence(), protein
- .getSequenceAt(0).getDatasetSequence(), map);
+ new int[]
+ { 40, 41 }, 3, 1);
+ acf.addMap(cdna.getSequenceAt(0).getDatasetSequence(),
+ protein.getSequenceAt(0).getDatasetSequence(), map);
// map second dna to second protein seq
- map = new MapList(new int[] { 20, 20, 22, 23, 24, 26 }, new int[] { 50,
- 51 }, 3, 1);
- acf.addMap(cdna.getSequenceAt(1).getDatasetSequence(), protein
- .getSequenceAt(1).getDatasetSequence(), map);
+ map = new MapList(new int[] { 20, 20, 22, 23, 24, 26 },
+ new int[]
+ { 50, 51 }, 3, 1);
+ acf.addMap(cdna.getSequenceAt(1).getDatasetSequence(),
+ protein.getSequenceAt(1).getDatasetSequence(), map);
// map third dna to third protein seq
- map = new MapList(new int[] { 30, 30, 32, 34, 36, 37 }, new int[] { 60,
- 61 }, 3, 1);
- acf.addMap(cdna.getSequenceAt(2).getDatasetSequence(), protein
- .getSequenceAt(2).getDatasetSequence(), map);
- List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
- { acf });
+ map = new MapList(new int[] { 30, 30, 32, 34, 36, 37 },
+ new int[]
+ { 60, 61 }, 3, 1);
+ acf.addMap(cdna.getSequenceAt(2).getDatasetSequence(),
+ protein.getSequenceAt(2).getDatasetSequence(), map);
+ List<AlignedCodonFrame> acfList = Arrays
+ .asList(new AlignedCodonFrame[]
+ { acf });
dnaView = new AlignViewport(cdna);
proteinView = new AlignViewport(protein);
public void testFlattenRanges()
{
assertEquals("[1, 2, 3, 4]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 1, 4 })));
- assertEquals(
- "[1, 2, 3, 4]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 1, 2, 3,
- 4 })));
- assertEquals(
- "[1, 2, 3, 4]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 1, 1, 2,
- 2, 3, 3, 4, 4 })));
- assertEquals(
- "[1, 2, 3, 4, 7, 8, 9, 12]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 1, 4, 7,
- 9, 12, 12 })));
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 1, 4 })));
+ assertEquals("[1, 2, 3, 4]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 1, 2, 3, 4 })));
+ assertEquals("[1, 2, 3, 4]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 1, 1, 2, 2, 3, 3, 4, 4 })));
+ assertEquals("[1, 2, 3, 4, 7, 8, 9, 12]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 1, 4, 7, 9, 12, 12 })));
// trailing unpaired start position is ignored:
- assertEquals(
- "[1, 2, 3, 4, 7, 8, 9, 12]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 1, 4, 7,
- 9, 12, 12, 15 })));
+ assertEquals("[1, 2, 3, 4, 7, 8, 9, 12]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 1, 4, 7, 9, 12, 12, 15 })));
}
/**
MapList map = new MapList(new int[] { 1, 6 }, new int[] { 1, 2 }, 3, 1);
for (int seq = 0; seq < 3; seq++)
{
- acf.addMap(cdna.getSequenceAt(seq).getDatasetSequence(), protein
- .getSequenceAt(seq).getDatasetSequence(), map);
+ acf.addMap(cdna.getSequenceAt(seq).getDatasetSequence(),
+ protein.getSequenceAt(seq).getDatasetSequence(), map);
}
- List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
- { acf });
+ List<AlignedCodonFrame> acfList = Arrays
+ .asList(new AlignedCodonFrame[]
+ { acf });
AlignViewportI dnaView = new AlignViewport(cdna);
AlignViewportI proteinView = new AlignViewport(protein);
FileFormat.Fasta);
cdna.setDataset(null);
AlignmentI protein = loadAlignment(
- ">Seq1\n-KA-S\n>Seq2\n--L-QY\n>Seq3\nQ-V-M\n", FileFormat.Fasta);
+ ">Seq1\n-KA-S\n>Seq2\n--L-QY\n>Seq3\nQ-V-M\n",
+ FileFormat.Fasta);
protein.setDataset(null);
AlignedCodonFrame acf = new AlignedCodonFrame();
MapList map = new MapList(new int[] { 1, 9 }, new int[] { 1, 3 }, 3, 1);
for (int seq = 0; seq < 3; seq++)
{
- acf.addMap(cdna.getSequenceAt(seq).getDatasetSequence(), protein
- .getSequenceAt(seq).getDatasetSequence(), map);
+ acf.addMap(cdna.getSequenceAt(seq).getDatasetSequence(),
+ protein.getSequenceAt(seq).getDatasetSequence(), map);
}
- List<AlignedCodonFrame> acfList = Arrays.asList(new AlignedCodonFrame[]
- { acf });
+ List<AlignedCodonFrame> acfList = Arrays
+ .asList(new AlignedCodonFrame[]
+ { acf });
AlignViewportI dnaView = new AlignViewport(cdna);
AlignViewportI proteinView = new AlignViewport(protein);
/*
* Seq1 has three mappings
*/
- List<AlignedCodonFrame> result = MappingUtils.findMappingsForSequence(
- seq1, mappings);
+ List<AlignedCodonFrame> result = MappingUtils
+ .findMappingsForSequence(seq1, mappings);
assertEquals(3, result.size());
assertTrue(result.contains(acf1));
assertTrue(result.contains(acf2));
*/
List<AlignedCodonFrame> result = MappingUtils
.findMappingsForSequenceAndOthers(null, mappings,
- Arrays.asList(new SequenceI[] { seq1, seq2 }));
+ Arrays.asList(new SequenceI[]
+ { seq1, seq2 }));
assertTrue(result.isEmpty());
result = MappingUtils.findMappingsForSequenceAndOthers(seq1, null,
- Arrays.asList(new SequenceI[] { seq1, seq2 }));
+ Arrays.asList(new SequenceI[]
+ { seq1, seq2 }));
assertTrue(result.isEmpty());
/*
* Seq1 has three mappings, but filter argument will only accept
* those to seq2
*/
- result = MappingUtils.findMappingsForSequenceAndOthers(
- seq1,
- mappings,
- Arrays.asList(new SequenceI[] { seq1, seq2,
- seq1.getDatasetSequence() }));
+ result = MappingUtils.findMappingsForSequenceAndOthers(seq1, mappings,
+ Arrays.asList(new SequenceI[]
+ { seq1, seq2, seq1.getDatasetSequence() }));
assertEquals(2, result.size());
assertTrue(result.contains(acf1));
assertTrue(result.contains(acf2));
dna.createDatasetSequence();
protein.createDatasetSequence();
AlignedCodonFrame acf = new AlignedCodonFrame();
- MapList map = new MapList(new int[] { 8, 16 }, new int[] { 5, 7 }, 3, 1);
+ MapList map = new MapList(new int[] { 8, 16 }, new int[] { 5, 7 }, 3,
+ 1);
acf.addMap(dna.getDatasetSequence(), protein.getDatasetSequence(), map);
List<AlignedCodonFrame> mappings = new ArrayList<>();
mappings.add(acf);
*/
EditCommand ec = new EditCommand();
final Edit edit = ec.new Edit(Action.INSERT_GAP,
- new SequenceI[] { protein }, 4, 2, '-');
+ new SequenceI[]
+ { protein }, 4, 2, '-');
ec.appendEdit(edit, prot, true, null);
/*
public void testFlattenRanges_reverseStrand()
{
assertEquals("[4, 3, 2, 1]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 4, 1 })));
- assertEquals(
- "[4, 3, 2, 1]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 4, 3, 2,
- 1 })));
- assertEquals(
- "[4, 3, 2, 1]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 4, 4, 3,
- 3, 2, 2, 1, 1 })));
- assertEquals(
- "[12, 9, 8, 7, 4, 3, 2, 1]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 12, 12,
- 9, 7, 4, 1 })));
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 4, 1 })));
+ assertEquals("[4, 3, 2, 1]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 4, 3, 2, 1 })));
+ assertEquals("[4, 3, 2, 1]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 4, 4, 3, 3, 2, 2, 1, 1 })));
+ assertEquals("[12, 9, 8, 7, 4, 3, 2, 1]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 12, 12, 9, 7, 4, 1 })));
// forwards and backwards anyone?
- assertEquals(
- "[4, 5, 6, 3, 2, 1]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 4, 6, 3,
- 1 })));
+ assertEquals("[4, 5, 6, 3, 2, 1]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 4, 6, 3, 1 })));
// backwards and forwards
- assertEquals(
- "[3, 2, 1, 4, 5, 6]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 3, 1, 4,
- 6 })));
+ assertEquals("[3, 2, 1, 4, 5, 6]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 3, 1, 4, 6 })));
// trailing unpaired start position is ignored:
- assertEquals(
- "[12, 9, 8, 7, 4, 3, 2]",
- Arrays.toString(MappingUtils.flattenRanges(new int[] { 12, 12,
- 9, 7, 4, 2, 1 })));
+ assertEquals("[12, 9, 8, 7, 4, 3, 2]",
+ Arrays.toString(MappingUtils.flattenRanges(new int[]
+ { 12, 12, 9, 7, 4, 2, 1 })));
}
/**
assertEquals("[12, 11, 8, 4]", Arrays.toString(ranges));
}
+ @Test(groups = { "Functional" })
+ public void testRangeContains()
+ {
+ /*
+ * both forward ranges
+ */
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 1, 10 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 2, 10 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 1, 9 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 4, 5 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 0, 9 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { -10, -9 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 1, 11 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 11, 12 }));
+
+ /*
+ * forward range, reverse query
+ */
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 10, 1 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 9, 1 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 10, 2 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 5, 5 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 11, 1 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 10, 0 }));
+
+ /*
+ * reverse range, forward query
+ */
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 1, 10 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 1, 9 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 2, 10 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 6, 6 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 6, 11 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 11, 20 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { -3, -2 }));
+
+ /*
+ * both reverse
+ */
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 10, 1 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 9, 1 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 10, 2 }));
+ assertTrue(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 3, 3 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 11, 1 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 10, 0 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { 12, 11 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 10, 1 }, new int[] { -5, -8 }));
+
+ /*
+ * bad arguments
+ */
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10, 12 }, new int[] { 1, 10 }));
+ assertFalse(
+ MappingUtils.rangeContains(new int[]
+ { 1, 10 }, new int[] { 1 }));
+ assertFalse(MappingUtils.rangeContains(new int[] { 1, 10 }, null));
+ assertFalse(MappingUtils.rangeContains(null, new int[] { 1, 10 }));
+ }
+
+ @Test(groups = "Functional")
+ public void testRemoveEndPositions()
+ {
+ List<int[]> ranges = new ArrayList<>();
+
+ /*
+ * case 1: truncate last range
+ */
+ ranges.add(new int[] { 1, 10 });
+ ranges.add(new int[] { 20, 30 });
+ MappingUtils.removeEndPositions(5, ranges);
+ assertEquals(2, ranges.size());
+ assertEquals(25, ranges.get(1)[1]);
+
+ /*
+ * case 2: remove last range
+ */
+ ranges.clear();
+ ranges.add(new int[] { 1, 10 });
+ ranges.add(new int[] { 20, 22 });
+ MappingUtils.removeEndPositions(3, ranges);
+ assertEquals(1, ranges.size());
+ assertEquals(10, ranges.get(0)[1]);
+
+ /*
+ * case 3: truncate penultimate range
+ */
+ ranges.clear();
+ ranges.add(new int[] { 1, 10 });
+ ranges.add(new int[] { 20, 21 });
+ MappingUtils.removeEndPositions(3, ranges);
+ assertEquals(1, ranges.size());
+ assertEquals(9, ranges.get(0)[1]);
+
+ /*
+ * case 4: remove last two ranges
+ */
+ ranges.clear();
+ ranges.add(new int[] { 1, 10 });
+ ranges.add(new int[] { 20, 20 });
+ ranges.add(new int[] { 30, 30 });
+ MappingUtils.removeEndPositions(3, ranges);
+ assertEquals(1, ranges.size());
+ assertEquals(9, ranges.get(0)[1]);
+ }
+
+ @Test(groups = "Functional")
+ public void testListToArray()
+ {
+ List<int[]> ranges = new ArrayList<>();
+
+ int[] result = MappingUtils.rangeListToArray(ranges);
+ assertEquals(result.length, 0);
+ ranges.add(new int[] { 24, 12 });
+ result = MappingUtils.rangeListToArray(ranges);
+ assertEquals(result.length, 2);
+ assertEquals(result[0], 24);
+ assertEquals(result[1], 12);
+ ranges.add(new int[] { -7, 30 });
+ result = MappingUtils.rangeListToArray(ranges);
+ assertEquals(result.length, 4);
+ assertEquals(result[0], 24);
+ assertEquals(result[1], 12);
+ assertEquals(result[2], -7);
+ assertEquals(result[3], 30);
+ try
+ {
+ MappingUtils.rangeListToArray(null);
+ fail("Expected exception");
+ } catch (NullPointerException e)
+ {
+ // expected
+ }
+ }
+
+ // new for 2.12
+ @Test(groups = "Functional")
+ public void testAddRange()
+ {
+ int[] range = { 1, 5 };
+ List<int[]> ranges = new ArrayList<>();
+
+ // add to empty list:
+ MappingUtils.addRange(range, ranges);
+ assertEquals(1, ranges.size());
+ assertSame(range, ranges.get(0));
+
+ // extend contiguous (same position):
+ MappingUtils.addRange(new int[] { 5, 10 }, ranges);
+ assertEquals(1, ranges.size());
+ assertEquals(1, ranges.get(0)[0]);
+ assertEquals(10, ranges.get(0)[1]);
+
+ // extend contiguous (next position):
+ MappingUtils.addRange(new int[] { 11, 15 }, ranges);
+ assertEquals(1, ranges.size());
+ assertEquals(1, ranges.get(0)[0]);
+ assertEquals(15, ranges.get(0)[1]);
+
+ // change direction: range is not merged:
+ MappingUtils.addRange(new int[] { 16, 10 }, ranges);
+ assertEquals(2, ranges.size());
+ assertEquals(16, ranges.get(1)[0]);
+ assertEquals(10, ranges.get(1)[1]);
+
+ // extend reverse contiguous (same position):
+ MappingUtils.addRange(new int[] { 10, 8 }, ranges);
+ assertEquals(2, ranges.size());
+ assertEquals(16, ranges.get(1)[0]);
+ assertEquals(8, ranges.get(1)[1]);
+
+ // extend reverse contiguous (next position):
+ MappingUtils.addRange(new int[] { 7, 6 }, ranges);
+ assertEquals(2, ranges.size());
+ assertEquals(16, ranges.get(1)[0]);
+ assertEquals(6, ranges.get(1)[1]);
+
+ // change direction: range is not merged:
+ MappingUtils.addRange(new int[] { 6, 9 }, ranges);
+ assertEquals(3, ranges.size());
+ assertEquals(6, ranges.get(2)[0]);
+ assertEquals(9, ranges.get(2)[1]);
+
+ // not contiguous: not merged
+ MappingUtils.addRange(new int[] { 11, 12 }, ranges);
+ assertEquals(4, ranges.size());
+ assertEquals(11, ranges.get(3)[0]);
+ assertEquals(12, ranges.get(3)[1]);
+ }
}