// Copyright 2015 Thomas Müller // This file is part of MarMoT, which is licensed under GPLv3. package lemming.test.lemma.toutanova; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import lemming.lemma.toutanova.Aligner; import lemming.lemma.toutanova.SimpleAligner; import lemming.lemma.toutanova.Aligner.Pair; import org.junit.Test; public class SimpleAlignerTest { @Test public void mergeEmptyInputTest() { mergeEmptyInputTest(Arrays.asList(0, 1, 2, 3), Arrays.asList(2, 4)); mergeEmptyInputTest(Arrays.asList(0, 1, 0, 3, 4, 5), Arrays.asList(4, 9)); mergeEmptyInputTest(Arrays.asList(1, 1, 0, 1, 2, 3), Arrays.asList(1, 2, 2, 3)); } private void mergeEmptyInputTest(List<Integer> alignment, List<Integer> expected) { List<Integer> merged = Aligner.StaticMethods.mergeEmptyInputSegments(alignment); assertEquals(expected, merged); } @Test public void test() { Aligner aligner = new SimpleAligner(); testAligner(aligner, "read", "read", Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1)); testAligner(aligner, "reads", "read", Arrays.asList(1, 1, 1, 1, 1, 1, 2, 1)); testAligner(aligner, "^reading$", "^read$", Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1)); } @Test public void testToPairs() { testToPairs("read", "read", Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1), Arrays.asList("r", "r", "e", "e", "a", "a", "d", "d") ); testToPairs("reads", "read", Arrays.asList(1, 1, 1, 1, 1, 1, 2, 1), Arrays.asList("r", "r", "e", "e", "a", "a", "ds", "d") ); testToPairs("^sänge$", "^singen$", Arrays.asList(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2), Arrays.asList("^", "^", "s", "s", "ä", "i", "n", "n", "g", "g", "e", "e", "$", "n$")); } protected void testToPairs(String input, String output, List<Integer> indexes, List<String> expected_strings) { List<Pair> expected = new LinkedList<>(); Iterator<String> iterator = expected_strings.iterator(); while (iterator.hasNext()) { String input_segment = iterator.next(); String output_segment = iterator.next(); Pair pair = new Pair(input_segment, output_segment); expected.add(pair); } assertEquals(expected, Pair.toPairs(input, output, indexes)); } protected void testAligner(Aligner aligner, String input, String output, List<Integer> expected) { List<Integer> actual = aligner.align(input, output); assertEquals(expected, actual); } }