package com.github.liblevenshtein.transducer; import java.net.URL; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import static org.assertj.core.api.Assertions.assertThat; import lombok.val; import com.github.liblevenshtein.collection.dictionary.SortedDawg; import com.github.liblevenshtein.distance.MemoizedMergeAndSplit; import com.github.liblevenshtein.serialization.ProtobufSerializer; import com.github.liblevenshtein.serialization.Serializer; import com.github.liblevenshtein.transducer.factory.TransducerBuilder; import static com.github.liblevenshtein.assertion.CandidateAssertions.assertThat; import static com.github.liblevenshtein.assertion.SetAssertions.assertThat; @SuppressWarnings("unchecked") public class MergeAndSplitTransducerTest { private static final int MAX_DISTANCE = 3; private static final String QUERY_TERM = "Jvaa"; private ITransducer<Candidate> transducer; private Set<Candidate> expectedCandidates; @BeforeTest @SuppressWarnings("checkstyle:methodlength") public void setUp() throws Exception { final URL dictionaryUrl = getClass().getResource("/programming-languages.protobuf.bytes"); final Serializer serializer = new ProtobufSerializer(); final SortedDawg dictionary = serializer.deserialize(SortedDawg.class, dictionaryUrl); this.transducer = new TransducerBuilder() .algorithm(Algorithm.MERGE_AND_SPLIT) .defaultMaxDistance(MAX_DISTANCE) .dictionary(dictionary) .build(); this.expectedCandidates = new HashSet<>(); expectedCandidates.add(new Candidate("A#", 2)); expectedCandidates.add(new Candidate("A+", 2)); expectedCandidates.add(new Candidate("Ada", 2)); expectedCandidates.add(new Candidate("Agda", 2)); expectedCandidates.add(new Candidate("Bash", 2)); expectedCandidates.add(new Candidate("bc", 2)); expectedCandidates.add(new Candidate("C#", 2)); expectedCandidates.add(new Candidate("Caml", 2)); expectedCandidates.add(new Candidate("Cg", 2)); expectedCandidates.add(new Candidate("Ch", 2)); expectedCandidates.add(new Candidate("CL", 2)); expectedCandidates.add(new Candidate("Cola", 2)); expectedCandidates.add(new Candidate("Dart", 2)); expectedCandidates.add(new Candidate("dc", 2)); expectedCandidates.add(new Candidate("E#", 2)); expectedCandidates.add(new Candidate("Ease", 2)); expectedCandidates.add(new Candidate("es", 2)); expectedCandidates.add(new Candidate("F#", 2)); expectedCandidates.add(new Candidate("FL", 2)); expectedCandidates.add(new Candidate("FP", 2)); expectedCandidates.add(new Candidate("GJ", 2)); expectedCandidates.add(new Candidate("GM", 2)); expectedCandidates.add(new Candidate("Go", 2)); expectedCandidates.add(new Candidate("Haxe", 2)); expectedCandidates.add(new Candidate("Id", 2)); expectedCandidates.add(new Candidate("Io", 2)); expectedCandidates.add(new Candidate("J#", 2)); expectedCandidates.add(new Candidate("J++", 2)); expectedCandidates.add(new Candidate("JADE", 2)); expectedCandidates.add(new Candidate("Jako", 2)); expectedCandidates.add(new Candidate("JAL", 2)); expectedCandidates.add(new Candidate("JASS", 2)); expectedCandidates.add(new Candidate("Java", 2)); expectedCandidates.add(new Candidate("JCL", 2)); expectedCandidates.add(new Candidate("JEAN", 2)); expectedCandidates.add(new Candidate("JOSS", 2)); expectedCandidates.add(new Candidate("Joy", 2)); expectedCandidates.add(new Candidate("Julia", 2)); expectedCandidates.add(new Candidate("Lava", 2)); expectedCandidates.add(new Candidate("Leda", 2)); expectedCandidates.add(new Candidate("Lua", 2)); expectedCandidates.add(new Candidate("M4", 2)); expectedCandidates.add(new Candidate("make", 2)); expectedCandidates.add(new Candidate("Mary", 2)); expectedCandidates.add(new Candidate("Max", 2)); expectedCandidates.add(new Candidate("Maya", 2)); expectedCandidates.add(new Candidate("Mesa", 2)); expectedCandidates.add(new Candidate("ML", 2)); expectedCandidates.add(new Candidate("Nu", 2)); expectedCandidates.add(new Candidate("Oak", 2)); expectedCandidates.add(new Candidate("Opa", 2)); expectedCandidates.add(new Candidate("Oz", 2)); expectedCandidates.add(new Candidate("P#", 2)); expectedCandidates.add(new Candidate("Pawn", 2)); expectedCandidates.add(new Candidate("Qalb", 2)); expectedCandidates.add(new Candidate("Qi", 2)); expectedCandidates.add(new Candidate("rc", 2)); expectedCandidates.add(new Candidate("Reia", 2)); expectedCandidates.add(new Candidate("S2", 2)); expectedCandidates.add(new Candidate("S3", 2)); expectedCandidates.add(new Candidate("SR", 2)); expectedCandidates.add(new Candidate("Tea", 2)); expectedCandidates.add(new Candidate("Vala", 2)); expectedCandidates.add(new Candidate("Vvvv", 2)); expectedCandidates.add(new Candidate("X#", 2)); expectedCandidates.add(new Candidate("XC", 2)); expectedCandidates.add(new Candidate("XL", 2)); expectedCandidates.add(new Candidate("A++", 3)); expectedCandidates.add(new Candidate("ABAP", 3)); expectedCandidates.add(new Candidate("ABC", 3)); expectedCandidates.add(new Candidate("ABLE", 3)); expectedCandidates.add(new Candidate("ABSET", 3)); expectedCandidates.add(new Candidate("ABSYS", 3)); expectedCandidates.add(new Candidate("ACC", 3)); expectedCandidates.add(new Candidate("ACL2", 3)); expectedCandidates.add(new Candidate("Agora", 3)); expectedCandidates.add(new Candidate("AIMMS", 3)); expectedCandidates.add(new Candidate("Alef", 3)); expectedCandidates.add(new Candidate("ALF", 3)); expectedCandidates.add(new Candidate("Alice", 3)); expectedCandidates.add(new Candidate("Alma-0", 3)); expectedCandidates.add(new Candidate("Amiga E", 3)); expectedCandidates.add(new Candidate("AMOS", 3)); expectedCandidates.add(new Candidate("AMPL", 3)); expectedCandidates.add(new Candidate("APL", 3)); expectedCandidates.add(new Candidate("Arc", 3)); expectedCandidates.add(new Candidate("ARexx", 3)); expectedCandidates.add(new Candidate("Argus", 3)); expectedCandidates.add(new Candidate("ATS", 3)); expectedCandidates.add(new Candidate("AWK", 3)); expectedCandidates.add(new Candidate("Axum", 3)); expectedCandidates.add(new Candidate("B", 3)); expectedCandidates.add(new Candidate("Babbage", 3)); expectedCandidates.add(new Candidate("BAIL", 3)); expectedCandidates.add(new Candidate("BASIC", 3)); expectedCandidates.add(new Candidate("Batch", 3)); expectedCandidates.add(new Candidate("BCPL", 3)); expectedCandidates.add(new Candidate("BETA", 3)); expectedCandidates.add(new Candidate("BitC", 3)); expectedCandidates.add(new Candidate("BLISS", 3)); expectedCandidates.add(new Candidate("Blue", 3)); expectedCandidates.add(new Candidate("Bon", 3)); expectedCandidates.add(new Candidate("Boo", 3)); expectedCandidates.add(new Candidate("BPEL", 3)); expectedCandidates.add(new Candidate("BREW", 3)); expectedCandidates.add(new Candidate("C", 3)); expectedCandidates.add(new Candidate("C--", 3)); expectedCandidates.add(new Candidate("C/AL", 3)); expectedCandidates.add(new Candidate("C++", 3)); expectedCandidates.add(new Candidate("CDuce", 3)); expectedCandidates.add(new Candidate("Cecil", 3)); expectedCandidates.add(new Candidate("Cel", 3)); expectedCandidates.add(new Candidate("Cesil", 3)); expectedCandidates.add(new Candidate("CFML", 3)); expectedCandidates.add(new Candidate("CHAIN", 3)); expectedCandidates.add(new Candidate("Charm", 3)); expectedCandidates.add(new Candidate("Chef", 3)); expectedCandidates.add(new Candidate("CHILL", 3)); expectedCandidates.add(new Candidate("ChucK", 3)); expectedCandidates.add(new Candidate("CICS", 3)); expectedCandidates.add(new Candidate("Cilk", 3)); expectedCandidates.add(new Candidate("Clean", 3)); expectedCandidates.add(new Candidate("CLIST", 3)); expectedCandidates.add(new Candidate("CLU", 3)); expectedCandidates.add(new Candidate("CMS-2", 3)); expectedCandidates.add(new Candidate("COBOL", 3)); expectedCandidates.add(new Candidate("Cobra", 3)); expectedCandidates.add(new Candidate("CODE", 3)); expectedCandidates.add(new Candidate("ColdC", 3)); expectedCandidates.add(new Candidate("COMAL", 3)); expectedCandidates.add(new Candidate("COMIT", 3)); expectedCandidates.add(new Candidate("Cool", 3)); expectedCandidates.add(new Candidate("Coq", 3)); expectedCandidates.add(new Candidate("Corn", 3)); expectedCandidates.add(new Candidate("CPL", 3)); expectedCandidates.add(new Candidate("csh", 3)); expectedCandidates.add(new Candidate("CSP", 3)); expectedCandidates.add(new Candidate("Curl", 3)); expectedCandidates.add(new Candidate("Curry", 3)); expectedCandidates.add(new Candidate("D", 3)); expectedCandidates.add(new Candidate("DASL", 3)); expectedCandidates.add(new Candidate("dBase", 3)); expectedCandidates.add(new Candidate("DCL", 3)); expectedCandidates.add(new Candidate("DIBOL", 3)); expectedCandidates.add(new Candidate("DinkC", 3)); expectedCandidates.add(new Candidate("Dog", 3)); expectedCandidates.add(new Candidate("Draco", 3)); expectedCandidates.add(new Candidate("Dylan", 3)); expectedCandidates.add(new Candidate("E", 3)); expectedCandidates.add(new Candidate("EGL", 3)); expectedCandidates.add(new Candidate("ELAN", 3)); expectedCandidates.add(new Candidate("Elm", 3)); expectedCandidates.add(new Candidate("Emerald", 3)); expectedCandidates.add(new Candidate("Erlang", 3)); expectedCandidates.add(new Candidate("ESPOL", 3)); expectedCandidates.add(new Candidate("Etoys", 3)); expectedCandidates.add(new Candidate("Euler", 3)); expectedCandidates.add(new Candidate("F", 3)); expectedCandidates.add(new Candidate("Fancy", 3)); expectedCandidates.add(new Candidate("FAUST", 3)); expectedCandidates.add(new Candidate("Felix", 3)); expectedCandidates.add(new Candidate("FFP", 3)); expectedCandidates.add(new Candidate("Flex", 3)); expectedCandidates.add(new Candidate("FOCAL", 3)); expectedCandidates.add(new Candidate("FOCUS", 3)); expectedCandidates.add(new Candidate("FOIL", 3)); expectedCandidates.add(new Candidate("Forth", 3)); expectedCandidates.add(new Candidate("FoxBase", 3)); expectedCandidates.add(new Candidate("FPr", 3)); expectedCandidates.add(new Candidate("G", 3)); expectedCandidates.add(new Candidate("GAMS", 3)); expectedCandidates.add(new Candidate("GAP", 3)); expectedCandidates.add(new Candidate("GDL", 3)); expectedCandidates.add(new Candidate("Genie", 3)); expectedCandidates.add(new Candidate("Gibiane", 3)); expectedCandidates.add(new Candidate("GLSL", 3)); expectedCandidates.add(new Candidate("GNU E", 3)); expectedCandidates.add(new Candidate("Go!", 3)); expectedCandidates.add(new Candidate("GOAL", 3)); expectedCandidates.add(new Candidate("Gödel", 3)); expectedCandidates.add(new Candidate("Godiva", 3)); expectedCandidates.add(new Candidate("GOM", 3)); expectedCandidates.add(new Candidate("Goo", 3)); expectedCandidates.add(new Candidate("Gosu", 3)); expectedCandidates.add(new Candidate("GPSS", 3)); expectedCandidates.add(new Candidate("GRASS", 3)); expectedCandidates.add(new Candidate("HAL/S", 3)); expectedCandidates.add(new Candidate("HLSL", 3)); expectedCandidates.add(new Candidate("Hop", 3)); expectedCandidates.add(new Candidate("Hope", 3)); expectedCandidates.add(new Candidate("Hugo", 3)); expectedCandidates.add(new Candidate("Hume", 3)); expectedCandidates.add(new Candidate("ICI", 3)); expectedCandidates.add(new Candidate("Icon", 3)); expectedCandidates.add(new Candidate("IDL", 3)); expectedCandidates.add(new Candidate("Idris", 3)); expectedCandidates.add(new Candidate("IMP", 3)); expectedCandidates.add(new Candidate("Ioke", 3)); expectedCandidates.add(new Candidate("IPL", 3)); expectedCandidates.add(new Candidate("ISPF", 3)); expectedCandidates.add(new Candidate("ISWIM", 3)); expectedCandidates.add(new Candidate("J", 3)); expectedCandidates.add(new Candidate("Janus", 3)); expectedCandidates.add(new Candidate("Joule", 3)); expectedCandidates.add(new Candidate("JOVIAL", 3)); expectedCandidates.add(new Candidate("JScript", 3)); expectedCandidates.add(new Candidate("K", 3)); expectedCandidates.add(new Candidate("Karel", 3)); expectedCandidates.add(new Candidate("KEE", 3)); expectedCandidates.add(new Candidate("KIF", 3)); expectedCandidates.add(new Candidate("Kojo", 3)); expectedCandidates.add(new Candidate("KRC", 3)); expectedCandidates.add(new Candidate("KRL", 3)); expectedCandidates.add(new Candidate("ksh", 3)); expectedCandidates.add(new Candidate("L", 3)); expectedCandidates.add(new Candidate("Lagoona", 3)); expectedCandidates.add(new Candidate("LANSA", 3)); expectedCandidates.add(new Candidate("Lasso", 3)); expectedCandidates.add(new Candidate("LaTeX", 3)); expectedCandidates.add(new Candidate("LC-3", 3)); expectedCandidates.add(new Candidate("LIL", 3)); expectedCandidates.add(new Candidate("Limbo", 3)); expectedCandidates.add(new Candidate("LINC", 3)); expectedCandidates.add(new Candidate("Lingo", 3)); expectedCandidates.add(new Candidate("LIS", 3)); expectedCandidates.add(new Candidate("LISA", 3)); expectedCandidates.add(new Candidate("Lisaac", 3)); expectedCandidates.add(new Candidate("Lisp", 3)); expectedCandidates.add(new Candidate("Lithe", 3)); expectedCandidates.add(new Candidate("Logo", 3)); expectedCandidates.add(new Candidate("Logtalk", 3)); expectedCandidates.add(new Candidate("LPC", 3)); expectedCandidates.add(new Candidate("LSE", 3)); expectedCandidates.add(new Candidate("LSL", 3)); expectedCandidates.add(new Candidate("Lucid", 3)); expectedCandidates.add(new Candidate("Lynx", 3)); expectedCandidates.add(new Candidate("M", 3)); expectedCandidates.add(new Candidate("M2001", 3)); expectedCandidates.add(new Candidate("MAD", 3)); expectedCandidates.add(new Candidate("MAD/I", 3)); expectedCandidates.add(new Candidate("Magik", 3)); expectedCandidates.add(new Candidate("Magma", 3)); expectedCandidates.add(new Candidate("Maple", 3)); expectedCandidates.add(new Candidate("Maxima", 3)); expectedCandidates.add(new Candidate("MDL", 3)); expectedCandidates.add(new Candidate("MetaL", 3)); expectedCandidates.add(new Candidate("MIIS", 3)); expectedCandidates.add(new Candidate("MIMIC", 3)); expectedCandidates.add(new Candidate("Mirah", 3)); expectedCandidates.add(new Candidate("Miranda", 3)); expectedCandidates.add(new Candidate("Moby", 3)); expectedCandidates.add(new Candidate("Modula", 3)); expectedCandidates.add(new Candidate("Mohol", 3)); expectedCandidates.add(new Candidate("MOO", 3)); expectedCandidates.add(new Candidate("Mouse", 3)); expectedCandidates.add(new Candidate("MPD", 3)); expectedCandidates.add(new Candidate("MSIL", 3)); expectedCandidates.add(new Candidate("MSL", 3)); expectedCandidates.add(new Candidate("MUMPS", 3)); expectedCandidates.add(new Candidate("NASM", 3)); expectedCandidates.add(new Candidate("Neko", 3)); expectedCandidates.add(new Candidate("nesC", 3)); expectedCandidates.add(new Candidate("NESL", 3)); expectedCandidates.add(new Candidate("NEWP", 3)); expectedCandidates.add(new Candidate("NGL", 3)); expectedCandidates.add(new Candidate("Nial", 3)); expectedCandidates.add(new Candidate("Nice", 3)); expectedCandidates.add(new Candidate("NPL", 3)); expectedCandidates.add(new Candidate("NSIS", 3)); expectedCandidates.add(new Candidate("o:XML", 3)); expectedCandidates.add(new Candidate("Obix", 3)); expectedCandidates.add(new Candidate("OBJ2", 3)); expectedCandidates.add(new Candidate("Obliq", 3)); expectedCandidates.add(new Candidate("Obol", 3)); expectedCandidates.add(new Candidate("OCaml", 3)); expectedCandidates.add(new Candidate("occam", 3)); expectedCandidates.add(new Candidate("Octave", 3)); expectedCandidates.add(new Candidate("Onyx", 3)); expectedCandidates.add(new Candidate("Opal", 3)); expectedCandidates.add(new Candidate("OPL", 3)); expectedCandidates.add(new Candidate("OPS5", 3)); expectedCandidates.add(new Candidate("Orc", 3)); expectedCandidates.add(new Candidate("Oriel", 3)); expectedCandidates.add(new Candidate("Pascal", 3)); expectedCandidates.add(new Candidate("PCF", 3)); expectedCandidates.add(new Candidate("PDL", 3)); expectedCandidates.add(new Candidate("PEARL", 3)); expectedCandidates.add(new Candidate("Perl", 3)); expectedCandidates.add(new Candidate("PHP", 3)); expectedCandidates.add(new Candidate("Pico", 3)); expectedCandidates.add(new Candidate("Pict", 3)); expectedCandidates.add(new Candidate("Pike", 3)); expectedCandidates.add(new Candidate("PIKT", 3)); expectedCandidates.add(new Candidate("PILOT", 3)); expectedCandidates.add(new Candidate("Pizza", 3)); expectedCandidates.add(new Candidate("PL-11", 3)); expectedCandidates.add(new Candidate("PL/0", 3)); expectedCandidates.add(new Candidate("PL/B", 3)); expectedCandidates.add(new Candidate("PL/C", 3)); expectedCandidates.add(new Candidate("PL/I", 3)); expectedCandidates.add(new Candidate("PL/M", 3)); expectedCandidates.add(new Candidate("PL/P", 3)); expectedCandidates.add(new Candidate("PL360", 3)); expectedCandidates.add(new Candidate("PLANC", 3)); expectedCandidates.add(new Candidate("PLEX", 3)); expectedCandidates.add(new Candidate("Plus", 3)); expectedCandidates.add(new Candidate("PPL", 3)); expectedCandidates.add(new Candidate("Pro*C", 3)); expectedCandidates.add(new Candidate("PROIV", 3)); expectedCandidates.add(new Candidate("Promela", 3)); expectedCandidates.add(new Candidate("Pure", 3)); expectedCandidates.add(new Candidate("Q", 3)); expectedCandidates.add(new Candidate("QPL", 3)); expectedCandidates.add(new Candidate("R", 3)); expectedCandidates.add(new Candidate("R++", 3)); expectedCandidates.add(new Candidate("RAPID", 3)); expectedCandidates.add(new Candidate("Rapira", 3)); expectedCandidates.add(new Candidate("REBOL", 3)); expectedCandidates.add(new Candidate("Red", 3)); expectedCandidates.add(new Candidate("REFAL", 3)); expectedCandidates.add(new Candidate("rex", 3)); expectedCandidates.add(new Candidate("REXX", 3)); expectedCandidates.add(new Candidate("Rlab", 3)); expectedCandidates.add(new Candidate("ROOP", 3)); expectedCandidates.add(new Candidate("RPG", 3)); expectedCandidates.add(new Candidate("RPL", 3)); expectedCandidates.add(new Candidate("RSL", 3)); expectedCandidates.add(new Candidate("RTL/2", 3)); expectedCandidates.add(new Candidate("Ruby", 3)); expectedCandidates.add(new Candidate("Rust", 3)); expectedCandidates.add(new Candidate("S", 3)); expectedCandidates.add(new Candidate("S-Lang", 3)); expectedCandidates.add(new Candidate("S/SL", 3)); expectedCandidates.add(new Candidate("SA-C", 3)); expectedCandidates.add(new Candidate("SAIL", 3)); expectedCandidates.add(new Candidate("SALSA", 3)); expectedCandidates.add(new Candidate("SAM76", 3)); expectedCandidates.add(new Candidate("SAS", 3)); expectedCandidates.add(new Candidate("SASL", 3)); expectedCandidates.add(new Candidate("Sawzall", 3)); expectedCandidates.add(new Candidate("SBL", 3)); expectedCandidates.add(new Candidate("Scala", 3)); expectedCandidates.add(new Candidate("Scilab", 3)); expectedCandidates.add(new Candidate("Sed", 3)); expectedCandidates.add(new Candidate("Seed7", 3)); expectedCandidates.add(new Candidate("Self", 3)); expectedCandidates.add(new Candidate("SETL", 3)); expectedCandidates.add(new Candidate("Simula", 3)); expectedCandidates.add(new Candidate("SISAL", 3)); expectedCandidates.add(new Candidate("SLIP", 3)); expectedCandidates.add(new Candidate("SMALL", 3)); expectedCandidates.add(new Candidate("SML", 3)); expectedCandidates.add(new Candidate("SOL", 3)); expectedCandidates.add(new Candidate("SP/k", 3)); expectedCandidates.add(new Candidate("Span", 3)); expectedCandidates.add(new Candidate("SPARK", 3)); expectedCandidates.add(new Candidate("SPIN", 3)); expectedCandidates.add(new Candidate("SPS", 3)); expectedCandidates.add(new Candidate("Squeak", 3)); expectedCandidates.add(new Candidate("Stata", 3)); expectedCandidates.add(new Candidate("Strand", 3)); expectedCandidates.add(new Candidate("SYMPL", 3)); expectedCandidates.add(new Candidate("T", 3)); expectedCandidates.add(new Candidate("T-SQL", 3)); expectedCandidates.add(new Candidate("TACL", 3)); expectedCandidates.add(new Candidate("TADS", 3)); expectedCandidates.add(new Candidate("TAL", 3)); expectedCandidates.add(new Candidate("Tcl", 3)); expectedCandidates.add(new Candidate("TECO", 3)); expectedCandidates.add(new Candidate("TeX", 3)); expectedCandidates.add(new Candidate("TEX", 3)); expectedCandidates.add(new Candidate("TIE", 3)); expectedCandidates.add(new Candidate("Tom", 3)); expectedCandidates.add(new Candidate("TOM", 3)); expectedCandidates.add(new Candidate("TPU", 3)); expectedCandidates.add(new Candidate("Trac", 3)); expectedCandidates.add(new Candidate("TTCN", 3)); expectedCandidates.add(new Candidate("TTM", 3)); expectedCandidates.add(new Candidate("TUTOR", 3)); expectedCandidates.add(new Candidate("TXL", 3)); expectedCandidates.add(new Candidate("Umple", 3)); expectedCandidates.add(new Candidate("Uniface", 3)); expectedCandidates.add(new Candidate("UNITY", 3)); expectedCandidates.add(new Candidate("VBA", 3)); expectedCandidates.add(new Candidate("VHDL", 3)); expectedCandidates.add(new Candidate("VSXu", 3)); expectedCandidates.add(new Candidate("WebQL", 3)); expectedCandidates.add(new Candidate("X++", 3)); expectedCandidates.add(new Candidate("X10", 3)); expectedCandidates.add(new Candidate("XBL", 3)); expectedCandidates.add(new Candidate("XOTcl", 3)); expectedCandidates.add(new Candidate("XPL", 3)); expectedCandidates.add(new Candidate("XPL0", 3)); expectedCandidates.add(new Candidate("XSB", 3)); expectedCandidates.add(new Candidate("XSLT", 3)); expectedCandidates.add(new Candidate("YQL", 3)); expectedCandidates.add(new Candidate("Zeno", 3)); expectedCandidates.add(new Candidate("ZOPL", 3)); expectedCandidates.add(new Candidate("ZPL", 3)); } @Test public void testTransduce() { final Iterable<Candidate> actualCandidates = transducer.transduce(QUERY_TERM); final Iterator<Candidate> actualIter = actualCandidates.iterator(); val distance = new MemoizedMergeAndSplit(); while (actualIter.hasNext()) { final Candidate actualCandidate = actualIter.next(); assertThat(actualCandidate).hasDistance(distance, QUERY_TERM); assertThat(expectedCandidates).contains(actualCandidate); expectedCandidates.remove(actualCandidate); } assertThat(expectedCandidates).isEmpty(); } }