|
Java example source code file (NetworkEqualsTest.java)
The NetworkEqualsTest.java Java example source code/* * Copyright (C) 2014 The Guava Authors * * Licensed 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 com.google.common.graph; import com.google.common.testing.EqualsTester; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.util.Arrays; import java.util.Collection; @AndroidIncompatible // TODO(cpovirk): Figure out Android JUnit 4 support. Does it work with Gingerbread? @RunWith? @RunWith(Parameterized.class) public final class NetworkEqualsTest { private static final Integer N1 = 1; private static final Integer N2 = 2; private static final Integer N3 = 3; private static final String E11 = "1-1"; private static final String E12 = "1-2"; private static final String E12_A = "1-2a"; private static final String E13 = "1-3"; enum GraphType { UNDIRECTED, DIRECTED, HYPER // not yet used because we don't yet have a Hypergraph implementation } private final GraphType graphType; private final MutableNetwork<Integer, String> graph; // add parameters: directed/undirected @Parameters public static Collection<Object[]> parameters() { return Arrays.asList(new Object[][] {{GraphType.UNDIRECTED}, {GraphType.DIRECTED}}); } public NetworkEqualsTest(GraphType graphType) { this.graphType = graphType; this.graph = createGraph(graphType); } private static MutableNetwork<Integer, String> createGraph(GraphType graphType) { switch (graphType) { case UNDIRECTED: return NetworkBuilder.undirected().build(); case DIRECTED: return NetworkBuilder.directed().build(); default: throw new IllegalStateException("Unexpected graph type: " + graphType); } } private static GraphType oppositeType(GraphType graphType) { switch (graphType) { case UNDIRECTED: return GraphType.DIRECTED; case DIRECTED: return GraphType.UNDIRECTED; default: throw new IllegalStateException("Unexpected graph type: " + graphType); } } @Test public void equals_nodeSetsDiffer() { graph.addNode(N1); MutableNetwork<Integer, String> g2 = createGraph(graphType); g2.addNode(N2); new EqualsTester().addEqualityGroup(graph).addEqualityGroup(g2).testEquals(); } // Node sets are the same, but edge sets differ. @Test public void equals_edgeSetsDiffer() { graph.addEdge(E12, N1, N2); MutableNetwork<Integer, String> g2 = createGraph(graphType); g2.addEdge(E13, N1, N2); new EqualsTester().addEqualityGroup(graph).addEqualityGroup(g2).testEquals(); } // Node/edge sets are the same, but node/edge connections differ due to graph type. @Test public void equals_directedVsUndirected() { graph.addEdge(E12, N1, N2); MutableNetwork<Integer, String> g2 = createGraph(oppositeType(graphType)); g2.addEdge(E12, N1, N2); new EqualsTester().addEqualityGroup(graph).addEqualityGroup(g2).testEquals(); } // Node/edge sets and node/edge connections are the same, but types differ. // (In this case the graphs are considered equal; the type differences are irrelevant.) @Test public void equals_selfLoop_directedVsUndirected() { graph.addEdge(E11, N1, N1); MutableNetwork<Integer, String> g2 = createGraph(oppositeType(graphType)); g2.addEdge(E11, N1, N1); new EqualsTester().addEqualityGroup(graph, g2).testEquals(); } // Node/edge sets are the same, but node/edge connections differ. @Test public void equals_connectionsDiffer() { graph.addEdge(E12, N1, N2); graph.addEdge(E13, N1, N3); MutableNetwork<Integer, String> g2 = createGraph(graphType); // connect E13 to N1 and N2, and E12 to N1 and N3 => not equal g2.addEdge(E13, N1, N2); g2.addEdge(E12, N1, N3); new EqualsTester().addEqualityGroup(graph).addEqualityGroup(g2).testEquals(); } // Node/edge sets and node/edge connections are the same, but graph properties differ. // (In this case the graphs are considered equal; the property differences are irrelevant.) @Test public void equals_propertiesDiffer() { graph.addEdge(E12, N1, N2); MutableNetwork<Integer, String> g2 = NetworkBuilder.from(graph) .allowsParallelEdges(!graph.allowsParallelEdges()) .allowsSelfLoops(!graph.allowsSelfLoops()) .build(); g2.addEdge(E12, N1, N2); new EqualsTester().addEqualityGroup(graph, g2).testEquals(); } // Node/edge sets and node/edge connections are the same, but edge order differs. // (In this case the graphs are considered equal; the edge add orderings are irrelevant.) @Test public void equals_edgeAddOrdersDiffer() { NetworkBuilder<Integer, String> builder = NetworkBuilder.from(graph).allowsParallelEdges(true); MutableNetwork<Integer, String> g1 = builder.build(); MutableNetwork<Integer, String> g2 = builder.build(); // for ug1, add e12 first, then e12_a g1.addEdge(E12, N1, N2); g1.addEdge(E12_A, N1, N2); // for ug2, add e12_a first, then e12 g2.addEdge(E12_A, N1, N2); g2.addEdge(E12, N1, N2); new EqualsTester().addEqualityGroup(g1, g2).testEquals(); } @Test public void equals_edgeDirectionsDiffer() { graph.addEdge(E12, N1, N2); MutableNetwork<Integer, String> g2 = createGraph(graphType); g2.addEdge(E12, N2, N1); switch (graphType) { case UNDIRECTED: new EqualsTester().addEqualityGroup(graph, g2).testEquals(); break; case DIRECTED: new EqualsTester().addEqualityGroup(graph).addEqualityGroup(g2).testEquals(); break; default: throw new IllegalStateException("Unexpected graph type: " + graphType); } } } Other Java examples (source code examples)Here is a short list of links related to this Java NetworkEqualsTest.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.