Repository: flink
Updated Branches:
  refs/heads/release-1.4 e42182d40 -> 96051e516


[FLINK-5506] [gelly] Fix CommunityDetection NullPointerException

Double.MIN_VALUE != min(double)

This closes #5126


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/96051e51
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/96051e51
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/96051e51

Branch: refs/heads/release-1.4
Commit: 96051e516bdc114b04c5a3cbb75874c420e27e7b
Parents: e42182d
Author: Greg Hogan <c...@greghogan.com>
Authored: Tue Dec 5 12:38:50 2017 -0500
Committer: Greg Hogan <c...@greghogan.com>
Committed: Thu Dec 28 07:15:18 2017 -0500

----------------------------------------------------------------------
 .../flink/graph/library/CommunityDetection.java |   2 +-
 .../graph/library/CommunityDetectionTest.java   | 116 +++++++++++++++++++
 2 files changed, 117 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/96051e51/flink-libraries/flink-gelly/src/main/java/org/apache/flink/graph/library/CommunityDetection.java
----------------------------------------------------------------------
diff --git 
a/flink-libraries/flink-gelly/src/main/java/org/apache/flink/graph/library/CommunityDetection.java
 
b/flink-libraries/flink-gelly/src/main/java/org/apache/flink/graph/library/CommunityDetection.java
index ccf2bb1..2629105 100644
--- 
a/flink-libraries/flink-gelly/src/main/java/org/apache/flink/graph/library/CommunityDetection.java
+++ 
b/flink-libraries/flink-gelly/src/main/java/org/apache/flink/graph/library/CommunityDetection.java
@@ -144,7 +144,7 @@ public class CommunityDetection<K> implements 
GraphAlgorithm<K, Long, Double, Gr
 
                        if (receivedLabelsWithScores.size() > 0) {
                                // find the label with the highest score from 
the ones received
-                               double maxScore = Double.MIN_VALUE;
+                               double maxScore = -Double.MAX_VALUE;
                                long maxScoreLabel = vertex.getValue().f0;
                                for (long curLabel : 
receivedLabelsWithScores.keySet()) {
 

http://git-wip-us.apache.org/repos/asf/flink/blob/96051e51/flink-libraries/flink-gelly/src/test/java/org/apache/flink/graph/library/CommunityDetectionTest.java
----------------------------------------------------------------------
diff --git 
a/flink-libraries/flink-gelly/src/test/java/org/apache/flink/graph/library/CommunityDetectionTest.java
 
b/flink-libraries/flink-gelly/src/test/java/org/apache/flink/graph/library/CommunityDetectionTest.java
new file mode 100644
index 0000000..cbabcfe
--- /dev/null
+++ 
b/flink-libraries/flink-gelly/src/test/java/org/apache/flink/graph/library/CommunityDetectionTest.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.flink.graph.library;
+
+import org.apache.flink.api.common.typeinfo.TypeHint;
+import org.apache.flink.graph.Edge;
+import org.apache.flink.graph.Graph;
+import org.apache.flink.graph.Vertex;
+import org.apache.flink.graph.asm.AsmTestBase;
+import org.apache.flink.graph.asm.dataset.ChecksumHashCode;
+import org.apache.flink.graph.asm.dataset.ChecksumHashCode.Checksum;
+import org.apache.flink.graph.generator.SingletonEdgeGraph;
+import org.apache.flink.test.util.TestBaseUtils;
+import org.apache.flink.types.IntValue;
+import org.apache.flink.types.LongValue;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests for {@link CommunityDetection}.
+ */
+public class CommunityDetectionTest extends AsmTestBase {
+
+       @Test
+       public void testWithSimpleGraph() throws Exception {
+               Graph<IntValue, Long, Double> result = undirectedSimpleGraph
+                       .mapVertices(v -> (long) v.getId().getValue(),
+                               new TypeHint<Vertex<IntValue, 
Long>>(){}.getTypeInfo())
+                       .mapEdges(e -> (double) e.getTarget().getValue() + 
e.getSource().getValue(),
+                               new TypeHint<Edge<IntValue, 
Double>>(){}.getTypeInfo())
+                       .run(new CommunityDetection<>(10, 0.5));
+
+               String expectedResult =
+                       "(0,3)\n" +
+                       "(1,5)\n" +
+                       "(2,5)\n" +
+                       "(3,3)\n" +
+                       "(4,5)\n" +
+                       "(5,5)\n";
+
+               
TestBaseUtils.compareResultAsText(result.getVertices().collect(), 
expectedResult);
+       }
+
+       @Test
+       public void testWithSingletonEdgeGraph() throws Exception {
+               Graph<LongValue, Long, Double> result = new 
SingletonEdgeGraph(env, 1)
+                       .generate()
+                       .mapVertices(v -> v.getId().getValue(),
+                               new TypeHint<Vertex<LongValue, 
Long>>(){}.getTypeInfo())
+                       .mapEdges(e -> 1.0,
+                               new TypeHint<Edge<LongValue, 
Double>>(){}.getTypeInfo())
+                       .run(new CommunityDetection<>(10, 0.5));
+
+               String expectedResult =
+                       "(0,0)\n" +
+                       "(1,1)\n";
+
+               
TestBaseUtils.compareResultAsText(result.getVertices().collect(), 
expectedResult);
+       }
+
+       @Test
+       public void testWithEmptyGraphWithVertices() throws Exception {
+               emptyGraphWithVertices
+                       .mapVertices(v -> 0L,
+                               new TypeHint<Vertex<LongValue, 
Long>>(){}.getTypeInfo())
+                       .mapEdges(e -> 0.0,
+                               new TypeHint<Edge<LongValue, 
Double>>(){}.getTypeInfo())
+                       .run(new CommunityDetection<>(10, 0.5));
+       }
+
+       @Test
+       public void testWithEmptyGraphWithoutVertices() throws Exception {
+               emptyGraphWithoutVertices
+                       .mapVertices(v -> 0L,
+                               new TypeHint<Vertex<LongValue, 
Long>>(){}.getTypeInfo())
+                       .mapEdges(e -> 0.0,
+                               new TypeHint<Edge<LongValue, 
Double>>(){}.getTypeInfo())
+                       .run(new CommunityDetection<>(10, 0.5));
+       }
+
+       @Test
+       public void testWithRMatGraph() throws Exception {
+               Graph<LongValue, Long, Double> result = undirectedRMatGraph(8, 
4)
+                       .mapVertices(v -> v.getId().getValue(),
+                               new TypeHint<Vertex<LongValue, 
Long>>(){}.getTypeInfo())
+                       .mapEdges(e -> (double) e.getTarget().getValue() - 
e.getSource().getValue(),
+                               new TypeHint<Edge<LongValue, 
Double>>(){}.getTypeInfo())
+                       .run(new CommunityDetection<>(10, 0.5));
+
+               Checksum checksum = new ChecksumHashCode<Vertex<LongValue, 
Long>>()
+                       .run(result.getVertices())
+                       .execute();
+
+               assertEquals(184, checksum.getCount());
+               assertEquals(0x00000000000cdc96L, checksum.getChecksum());
+       }
+}

Reply via email to