@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); } }
@Signature public Integer hammingDistance(Environment env, Memory other) { HammingDistance distance = new HammingDistance(); return distance.apply(text, other.toString()); }
@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); }
@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) ; }
@Test public void testHammingDistance_nullLeftValue() { assertThatIllegalArgumentException().isThrownBy(() -> { distance.apply(null, ""); }); }
@Test public void testHammingDistance_nullRightValue() { assertThatIllegalArgumentException().isThrownBy(() -> { distance.apply("", null); }); }