/*
* File: GraphWalkerTest.java
* Authors: Jeremy D. Wendt
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright 2016, Sandia Corporation.
* Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
* license for use of this work by or on behalf of the U.S. Government.
* Export of this program may require a license from the United States
* Government. See CopyrightHistory.txt for complete details.
*
*/
package gov.sandia.cognition.graph;
import java.util.Map;
import java.util.Random;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Tests for the GraphWalker class
*
* @author jdwendt
*/
public class GraphWalkerTest
{
@Test
public void basicTest()
{
DirectedNodeEdgeGraph<String> g = new DenseMemoryGraph<>();
g.addEdge("a", "b");
Random r = new Random();
GraphWalker.RandomWalker<String> undirected
= new GraphWalker.RandomWalker<>(false, r);
GraphWalker<String> walker = new GraphWalker<>(g, undirected);
assertEquals("b", walker.getEndNode("a", 1));
assertEquals("b", walker.getEndNode("a", 3));
assertEquals("a", walker.getEndNode("a", 2));
assertEquals("b", walker.getEndNode("b", 2));
assertEquals("a", walker.getEndNode("b", 3));
GraphWalker.RandomWalker<String> directed
= new GraphWalker.RandomWalker<>(true, r);
walker = new GraphWalker<>(g, directed);
assertEquals("b", walker.getEndNode("a", 1));
assertEquals("b", walker.getEndNode("a", 3));
assertEquals("b", walker.getEndNode("a", 2));
assertEquals("b", walker.getEndNode("b", 2));
assertEquals("b", walker.getEndNode("b", 3));
g.addEdge("a", "c");
g.addEdge("b", "d");
walker = new GraphWalker<>(g, directed);
Map<String, Integer> endNodes = walker.getEndNodes("a", 3, 1000);
assertEquals(2, endNodes.size());
assertTrue(endNodes.containsKey("c"));
assertTrue(endNodes.containsKey("d"));
// They should split 50/50 over time, but there will be some mess in the randomness
assertTrue(endNodes.get("c") > 475);
assertTrue(endNodes.get("d") > 475);
// This one is more complicated, but you can work out the probabilities
walker = new GraphWalker<>(g, undirected);
endNodes = walker.getEndNodes("a", 2, 1000);
assertEquals(2, endNodes.size());
assertTrue(endNodes.containsKey("a"));
assertTrue(endNodes.containsKey("d"));
assertTrue(endNodes.get("a") > 720);
assertTrue(endNodes.get("d") > 220);
}
}