mayya-sharipova commented on code in PR #11781: URL: https://github.com/apache/lucene/pull/11781#discussion_r974364724
########## lucene/core/src/test/org/apache/lucene/util/hnsw/TestHnswGraph.java: ########## @@ -555,6 +556,78 @@ public void testDiversity() throws IOException { assertLevel0Neighbors(builder.hnsw, 5, 1, 4); } + public void testDiversityFallback() throws IOException { + vectorEncoding = randomVectorEncoding(); + similarityFunction = VectorSimilarityFunction.EUCLIDEAN; + // Some test cases can't be exercised in two dimensions; + // in particular if a new neighbor displaces an existing neighbor + // by being closer to the target, yet none of the existing neighbors is closer to the new vector + // than to the target -- ie they all remain diverse, so we simply drop the farthest one. + float[][] values = { + {0, 0, 0}, + {0, 1, 0}, + {0, 0, 2}, + {1, 0, 0}, + {0, 0.4f, 0} + }; + MockVectorValues vectors = new MockVectorValues(values); + // First add nodes until everybody gets a full neighbor list + HnswGraphBuilder<?> builder = + HnswGraphBuilder.create( + vectors, vectorEncoding, similarityFunction, 1, 10, random().nextInt()); + // node 0 is added by the builder constructor + // builder.addGraphNode(vectors.vectorValue(0)); + RandomAccessVectorValues vectorsCopy = vectors.copy(); + builder.addGraphNode(1, vectorsCopy); + builder.addGraphNode(2, vectorsCopy); + assertLevel0Neighbors(builder.hnsw, 0, 1, 2); + // 2 is closer to 0 than 1, so it is excluded as non-diverse + assertLevel0Neighbors(builder.hnsw, 1, 0); + // 1 is closer to 0 than 2, so it is excluded as non-diverse + assertLevel0Neighbors(builder.hnsw, 2, 0); + + builder.addGraphNode(3, vectorsCopy); + // this is one case we are testing; 2 has been displaced by 3 Review Comment: nice test! -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: issues-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org