@Signature public Integer hammingDistance(Environment env, Memory other) { HammingDistance distance = new HammingDistance(); return distance.apply(text, other.toString()); }
@Override public void eval() { String input1 = org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(rawInput1.start, rawInput1.end, rawInput1.buffer); String input2 = org.apache.drill.exec.expr.fn.impl.StringFunctionHelpers.toStringFromUTF8(rawInput2.start, rawInput2.end, rawInput2.buffer); out.value = d.apply(input1, input2); } }
@Override public void setup() { d = new org.apache.commons.text.similarity.HammingDistance(); }
@Test public void testHammingDistance() { assertThat(distance.apply("", "")).isEqualTo(0); assertThat(distance.apply("pappa", "pappa")).isEqualTo(0); assertThat(distance.apply("papaa", "pappa")).isEqualTo(1); assertThat(distance.apply("karolin", "kathrin")).isEqualTo(3); assertThat(distance.apply("karolin", "kerstin")).isEqualTo(3); assertThat(distance.apply("1011101", "1001001")).isEqualTo(2); assertThat(distance.apply("2173896", "2233796")).isEqualTo(3); assertThat(distance.apply("ATCG", "ACCC")).isEqualTo(2); }
@BeforeAll public static void setUp() { distance = new HammingDistance(); }
@UserFunction @Description( "apoc.text.hammingDistance(text1, text2) - compare the given strings with the Hamming distance algorithm." ) public Long hammingDistance(final @Name("text1") String text1, @Name("text2")final String text2) { if (text1 == null || text2 == null) { return null; } return (long)hammingDistance.apply(text1, text2) ; }
public static Stream<Arguments> parameters() { return Stream.of( Arguments.of(new HammingDistance(), "Sam I am.", "Ham I am.", 1), Arguments.of(new HammingDistance(), "Japtheth, Ham, Shem", "Japtheth, HAM, Shem", 2), Arguments.of(new HammingDistance(), "Hamming", "Hamming", 0), Arguments.of(new LevenshteinDistance(), "Apache", "a patchy", 4), Arguments.of(new LevenshteinDistance(), "go", "no go", 3), Arguments.of(new LevenshteinDistance(), "go", "go", 0), Arguments.of(new LevenshteinDistance(4), "Apache", "a patchy", 4), Arguments.of(new LevenshteinDistance(4), "go", "no go", 3), Arguments.of(new LevenshteinDistance(0), "go", "go", 0), Arguments.of( new EditDistance<Boolean>() { @Override public Boolean apply(final CharSequence left, final CharSequence right) { return left == right || (left != null && left.equals(right)); } }, "Bob's your uncle.", "Every good boy does fine.", false)); }
@Test public void testHammingDistance_nullLeftValue() { assertThatIllegalArgumentException().isThrownBy(() -> { distance.apply(null, ""); }); }
@Test public void testHammingDistance_nullRightValue() { assertThatIllegalArgumentException().isThrownBy(() -> { distance.apply("", null); }); }