Package com.opengamma.engine.view.compilation

Source Code of com.opengamma.engine.view.compilation.SubGraphingFilterTest

/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.view.compilation;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertSame;

import java.util.HashSet;
import java.util.Set;

import org.mockito.Mockito;
import org.testng.annotations.Test;

import com.google.common.collect.ImmutableSet;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.depgraph.DependencyGraph;
import com.opengamma.engine.depgraph.DependencyNode;
import com.opengamma.engine.depgraph.DependencyNodeFilter;
import com.opengamma.engine.function.ParameterizedFunction;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValuePropertyNames;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.id.UniqueId;
import com.opengamma.util.test.TestGroup;

/**
* Unit test for the {@link SubGraphingFilter} class.
*/
@Test(groups = TestGroup.UNIT)
public class SubGraphingFilterTest {

  private UniqueId id(final int id) {
    return UniqueId.of("Test", Integer.toString(id));
  }

  private ComputationTargetSpecification target(final int id) {
    return new ComputationTargetSpecification(ComputationTargetType.PRIMITIVE, id(id));
  }

  private DependencyNode node(final int id) {
    final DependencyNode node = new DependencyNode(target(id));
    node.setFunction(Mockito.mock(ParameterizedFunction.class));
    return node;
  }

  private DependencyNode tnode(final int id) {
    final DependencyNode node = node(id);
    node.addTerminalOutputValue(new ValueSpecification("V", node.getComputationTarget(), ValueProperties.with(ValuePropertyNames.FUNCTION, "Test").get()));
    return node;
  }

  private DependencyGraph graph(final DependencyNode... nodes) {
    final DependencyGraph graph = new DependencyGraph("Default");
    for (DependencyNode node : nodes) {
      graph.addDependencyNode(node);
      if (node.hasTerminalOutputValues()) {
        graph.addTerminalOutput(new ValueRequirement("V", node.getComputationTarget()), node.getTerminalOutputValues().iterator().next());
      }
    }
    return graph;
  }

  private ValueRequirement req(final int id) {
    return new ValueRequirement("V", target(id));
  }

  /**
   * Creates a graph of the form:
   *
   * <pre>
   *      N1 -> N2*
   * </pre>
   */
  private DependencyGraph smallGraph() {
    final DependencyNode n1 = node(1);
    final DependencyNode n2 = tnode(2);
    n2.addInputNode(n1);
    return graph(n1, n2);
  }

  /**
   * Creates a graph of the form:
   *
   * <pre>
   *    N1 ---> N4*-------
   *                       \
   *    N2 ---> N5 \        > N8*
   *        \        N7*---/
   *         ->    /
   *    N3 ---> N6
   * </pre>
   */
  private DependencyGraph largeGraph() {
    final DependencyNode n1 = node(1);
    final DependencyNode n2 = node(2);
    final DependencyNode n3 = node(3);
    final DependencyNode n4 = tnode(4);
    final DependencyNode n5 = node(5);
    final DependencyNode n6 = node(6);
    final DependencyNode n7 = tnode(7);
    final DependencyNode n8 = tnode(8);
    n4.addInputNode(n1);
    n5.addInputNode(n2);
    n6.addInputNode(n2);
    n6.addInputNode(n3);
    n7.addInputNode(n5);
    n7.addInputNode(n6);
    n8.addInputNode(n4);
    n8.addInputNode(n7);
    return graph(n1, n2, n3, n4, n5, n6, n7, n8);
  }

  public void testReturnSameGraph() {
    final SubGraphingFilter filter = new SubGraphingFilter(new DependencyNodeFilter() {
      @Override
      public boolean accept(final DependencyNode node) {
        return true;
      }
    });
    DependencyGraph graph = smallGraph();
    assertSame(filter.subGraph(graph, null), graph);
    graph = largeGraph();
    assertSame(filter.subGraph(graph, null), graph);
    graph = smallGraph();
    assertSame(filter.subGraph(graph, null), graph);
  }

  public void testReturnEmptyGraph() {
    final SubGraphingFilter filter = new SubGraphingFilter(new DependencyNodeFilter() {
      @Override
      public boolean accept(final DependencyNode node) {
        return false;
      }
    });
    final Set<ValueRequirement> missing = new HashSet<ValueRequirement>();
    assertEquals(filter.subGraph(smallGraph(), missing).getSize(), 0);
    assertEquals(missing.size(), 1);
    missing.clear();
    assertEquals(filter.subGraph(largeGraph(), missing).getSize(), 0);
    assertEquals(missing.size(), 3);
    missing.clear();
    assertEquals(filter.subGraph(smallGraph(), missing).getSize(), 0);
    assertEquals(missing.size(), 1);
  }

  public void testLeafNode1() {
    final SubGraphingFilter filter = new SubGraphingFilter(new InvalidTargetDependencyNodeFilter(ImmutableSet.of(id(1))));
    final Set<ValueRequirement> missing = new HashSet<ValueRequirement>();
    assertEquals(filter.subGraph(largeGraph(), missing).getSize(), 5);
    assertEquals(missing, ImmutableSet.of(req(4), req(8)));
  }

  public void testLeafNode2() {
    final SubGraphingFilter filter = new SubGraphingFilter(new InvalidTargetDependencyNodeFilter(ImmutableSet.of(id(2))));
    final Set<ValueRequirement> missing = new HashSet<ValueRequirement>();
    assertEquals(filter.subGraph(largeGraph(), missing).getSize(), 3);
    assertEquals(missing, ImmutableSet.of(req(7), req(8)));
    missing.clear();
    assertEquals(filter.subGraph(smallGraph(), missing).getSize(), 1);
    assertEquals(missing, ImmutableSet.of(req(2)));
    missing.clear();
    assertEquals(filter.subGraph(largeGraph(), missing).getSize(), 3);
    assertEquals(missing, ImmutableSet.of(req(7), req(8)));
  }

  public void testLeafNode3() {
    final SubGraphingFilter filter = new SubGraphingFilter(new InvalidTargetDependencyNodeFilter(ImmutableSet.of(id(3))));
    final Set<ValueRequirement> missing = new HashSet<ValueRequirement>();
    assertEquals(filter.subGraph(largeGraph(), missing).getSize(), 4);
    assertEquals(missing, ImmutableSet.of(req(7), req(8)));
  }

  public void testLeafNodes1and3() {
    final SubGraphingFilter filter = new SubGraphingFilter(new InvalidTargetDependencyNodeFilter(ImmutableSet.of(id(1), id(3))));
    final Set<ValueRequirement> missing = new HashSet<ValueRequirement>();
    assertEquals(filter.subGraph(largeGraph(), missing).getSize(), 2);
    assertEquals(missing, ImmutableSet.of(req(4), req(7), req(8)));
  }

  public void testMiddleNode() {
    final SubGraphingFilter filter = new SubGraphingFilter(new InvalidTargetDependencyNodeFilter(ImmutableSet.of(id(5))));
    final Set<ValueRequirement> missing = new HashSet<ValueRequirement>();
    assertEquals(filter.subGraph(largeGraph(), missing).getSize(), 5);
    assertEquals(missing, ImmutableSet.of(req(7), req(8)));
  }

  public void testRootNode() {
    final SubGraphingFilter filter = new SubGraphingFilter(new InvalidTargetDependencyNodeFilter(ImmutableSet.of(id(8))));
    final Set<ValueRequirement> missing = new HashSet<ValueRequirement>();
    assertEquals(filter.subGraph(largeGraph(), missing).getSize(), 7);
    assertEquals(missing, ImmutableSet.of(req(8)));
  }

  public void testRootAndLeafNode3() {
    final SubGraphingFilter filter = new SubGraphingFilter(new InvalidTargetDependencyNodeFilter(ImmutableSet.of(id(3), id(8))));
    final Set<ValueRequirement> missing = new HashSet<ValueRequirement>();
    assertEquals(filter.subGraph(largeGraph(), missing).getSize(), 4);
    assertEquals(missing, ImmutableSet.of(req(7), req(8)));
  }

}
TOP

Related Classes of com.opengamma.engine.view.compilation.SubGraphingFilterTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.