You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by gr...@apache.org on 2017/12/22 19:12:26 UTC

[3/5] flink git commit: [FLINK-5506] [gelly] Fix CommunityDetection NullPointerException

[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/a355df6e
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/a355df6e
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/a355df6e

Branch: refs/heads/master
Commit: a355df6e33f402beac01c2908cb0c64cfeccadb2
Parents: 1a98e32
Author: Greg Hogan <co...@greghogan.com>
Authored: Tue Dec 5 12:38:50 2017 -0500
Committer: Greg Hogan <co...@greghogan.com>
Committed: Thu Dec 21 10:35:53 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/a355df6e/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/a355df6e/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());
+	}
+}