/* This file is part of the Joshua Machine Translation System. * * Joshua is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, write to the Free Software Foundation, * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package joshua.corpus.suffix_array; import joshua.corpus.Phrase; import joshua.corpus.suffix_array.Pattern; import joshua.corpus.vocab.SymbolTable; import joshua.corpus.vocab.Vocabulary; import joshua.prefix_tree.PrefixTree; import joshua.util.Cache; import org.testng.Assert; import org.testng.annotations.Test; /** * * * @author Lane Schwartz */ public class PatternTest { int[] words = {1, 2, 3, SymbolTable.X, 4, 5, 6, SymbolTable.X, 7}; int[] extra = {30, 70, 22}; int[] extendedWords = {1, 2, 3, SymbolTable.X, 4, 5, 6, SymbolTable.X, 7, 30, 70, 22}; Vocabulary vocab = new Vocabulary(); Pattern pattern; @Test public void basicPattern() { pattern = new Pattern(vocab, words); Assert.assertEquals(pattern.getWordIDs(), words); Assert.assertEquals(pattern.getVocab(), vocab); Assert.assertEquals(pattern.arity(), 2); } @Test(dependsOnMethods = {"basicPattern"}) public void extendedPattern() { Pattern extendedPattern = new Pattern(pattern, extra); Assert.assertEquals(extendedPattern.getWordIDs().length, extendedWords.length); for (int i=0; i<extendedWords.length; i++) { Assert.assertEquals(extendedPattern.getWordIDs()[i], extendedWords[i]); } Assert.assertEquals(extendedPattern.getVocab(), vocab); Assert.assertEquals(extendedPattern.arity(), 2); } @Test(dependsOnMethods = {"basicPattern"}) public void copiedPattern() { Phrase phrase = pattern; Pattern copiedPattern = new Pattern(phrase); Assert.assertEquals(copiedPattern.getWordIDs().length, words.length); for (int i=0; i<words.length; i++) { Assert.assertEquals(copiedPattern.getWordIDs()[i], words[i]); } Assert.assertEquals(copiedPattern.getVocab(), vocab); Assert.assertEquals(copiedPattern.arity(), 2); } @Test public void getTerminalSequenceLengths() { { int[] flatWords = {1, 2, 3, 4, 5}; Pattern flat = new Pattern(vocab, flatWords); byte[] flatSeqs = flat.getTerminalSequenceLengths(); Assert.assertNotNull(flatSeqs); Assert.assertEquals(flatSeqs.length, 1); Assert.assertEquals(flatSeqs[0], 5); } { int[] hierWords = {1, SymbolTable.X, 6, 7}; Pattern hier = new Pattern(vocab, hierWords); byte[] hierSeqs = hier.getTerminalSequenceLengths(); Assert.assertNotNull(hierSeqs); Assert.assertEquals(hierSeqs.length, 2); Assert.assertEquals(hierSeqs[0], 1); Assert.assertEquals(hierSeqs[1], 2); } { int[] hierWords = {SymbolTable.X, 6, 7}; Pattern hier = new Pattern(vocab, hierWords); byte[] hierSeqs = hier.getTerminalSequenceLengths(); Assert.assertNotNull(hierSeqs); Assert.assertEquals(hierSeqs.length, 1); Assert.assertEquals(hierSeqs[0], 2); } { int[] hierWords = {1, 2, 3, SymbolTable.X}; Pattern hier = new Pattern(vocab, hierWords); byte[] hierSeqs = hier.getTerminalSequenceLengths(); Assert.assertNotNull(hierSeqs); Assert.assertEquals(hierSeqs.length, 1); Assert.assertEquals(hierSeqs[0], 3); } { int[] hierWords = {1, SymbolTable.X, 6, 7, SymbolTable.X}; Pattern hier = new Pattern(vocab, hierWords); byte[] hierSeqs = hier.getTerminalSequenceLengths(); Assert.assertNotNull(hierSeqs); Assert.assertEquals(hierSeqs.length, 2); Assert.assertEquals(hierSeqs[0], 1); Assert.assertEquals(hierSeqs[1], 2); } { int[] hierWords = {SymbolTable.X, 6, 7, SymbolTable.X, 10}; Pattern hier = new Pattern(vocab, hierWords); byte[] hierSeqs = hier.getTerminalSequenceLengths(); Assert.assertNotNull(hierSeqs); Assert.assertEquals(hierSeqs.length, 2); Assert.assertEquals(hierSeqs[0], 2); Assert.assertEquals(hierSeqs[1], 1); } { int[] hierWords = {1, 2, 3, SymbolTable.X, 6, 7, SymbolTable.X}; Pattern hier = new Pattern(vocab, hierWords); byte[] hierSeqs = hier.getTerminalSequenceLengths(); Assert.assertNotNull(hierSeqs); Assert.assertEquals(hierSeqs.length, 2); Assert.assertEquals(hierSeqs[0], 3); Assert.assertEquals(hierSeqs[1], 2); } { int[] hierWords = {1, SymbolTable.X, 6, SymbolTable.X, 9}; Pattern hier = new Pattern(vocab, hierWords); byte[] hierSeqs = hier.getTerminalSequenceLengths(); Assert.assertNotNull(hierSeqs); Assert.assertEquals(hierSeqs.length, 3); Assert.assertEquals(hierSeqs[0], 1); Assert.assertEquals(hierSeqs[1], 1); Assert.assertEquals(hierSeqs[2], 1); } { int[] hierWords = {1, 2, 3, SymbolTable.X, 6, 7, SymbolTable.X, 9, 10, 11, 12}; Pattern hier = new Pattern(vocab, hierWords); byte[] hierSeqs = hier.getTerminalSequenceLengths(); Assert.assertNotNull(hierSeqs); Assert.assertEquals(hierSeqs.length, 3); Assert.assertEquals(hierSeqs[0], 3); Assert.assertEquals(hierSeqs[1], 2); Assert.assertEquals(hierSeqs[2], 4); } } @Test(dependsOnMethods = {"extendedPattern","copiedPattern"}) public void cacheTest() { Cache<Pattern,Integer> cache = new Cache<Pattern,Integer>(10); cache.put(pattern, 1); Assert.assertTrue(cache.containsKey(pattern)); Assert.assertEquals((int) cache.get(pattern), 1); Pattern copiedPattern = new Pattern(pattern); Assert.assertTrue(cache.containsKey(copiedPattern)); Assert.assertEquals((int) cache.get(copiedPattern), 1); } }