### Eclipse Workspace Patch 1.0 #P lucene_solr_branch_4x Index: lucene/core/src/java/org/apache/lucene/util/fst/NoOutputs.java =================================================================== --- lucene/core/src/java/org/apache/lucene/util/fst/NoOutputs.java (revision 1460979) +++ lucene/core/src/java/org/apache/lucene/util/fst/NoOutputs.java (working copy) @@ -74,6 +74,13 @@ } @Override + public Object merge(Object first, Object second) { + assert first == NO_OUTPUT; + assert second == NO_OUTPUT; + return NO_OUTPUT; + } + + @Override public void write(Object prefix, DataOutput out) { //assert false; } Index: lucene/core/src/test/org/apache/lucene/util/fst/TestFSTs.java =================================================================== --- lucene/core/src/test/org/apache/lucene/util/fst/TestFSTs.java (revision 1460979) +++ lucene/core/src/test/org/apache/lucene/util/fst/TestFSTs.java (working copy) @@ -710,6 +710,29 @@ assertNull(fstEnum.seekFloor(new BytesRef("foo"))); assertNull(fstEnum.seekCeil(new BytesRef("foobaz"))); } + + + public void testDuplicateFSAString() throws Exception { + String str = "foobar"; + final Outputs outputs = NoOutputs.getSingleton(); + final Builder b = new Builder(FST.INPUT_TYPE.BYTE1, outputs); + IntsRef ints = new IntsRef(); + for(int i=0; i<10; i++) { + b.add(Util.toIntsRef(new BytesRef(str), ints), outputs.getNoOutput()); + } + FST fst = b.finish(); + + // count the input paths + int count = 0; + final BytesRefFSTEnum fstEnum = new BytesRefFSTEnum(fst); + while(fstEnum.next()!=null) { + count++; + } + assertEquals(1, count); + + assertNotNull(Util.get(fst, new BytesRef(str))); + assertNull(Util.get(fst, new BytesRef("foobaz"))); + } /* public void testTrivial() throws Exception {