Package com.opengamma.financial.filtering

Source Code of com.opengamma.financial.filtering.FilteringTest

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.filtering;

import static org.testng.Assert.assertEquals;

import java.util.concurrent.atomic.AtomicInteger;

import org.testng.annotations.Test;

import com.opengamma.core.position.Portfolio;
import com.opengamma.core.position.PortfolioNode;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.Trade;
import com.opengamma.core.position.impl.SimplePortfolio;
import com.opengamma.core.position.impl.SimplePortfolioNode;
import com.opengamma.core.position.impl.SimplePosition;
import com.opengamma.core.position.impl.SimpleTrade;
import com.opengamma.id.UniqueId;
import com.opengamma.util.test.TestGroup;

/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class FilteringTest {

  private static SimpleTrade sampleTrade(final AtomicInteger attribSource) {
    final SimpleTrade trade = new SimpleTrade();
    trade.addAttribute("Foo", Integer.toString(attribSource.getAndIncrement()));
    return trade;
  }

  private static SimplePosition samplePosition(final AtomicInteger attribSource) {
    final SimplePosition position = new SimplePosition();
    position.addTrade(sampleTrade(attribSource));
    return position;
  }

  private static SimplePortfolioNode samplePortfolioNode(final AtomicInteger attribSource, final int depth) {
    final SimplePortfolioNode node = new SimplePortfolioNode();
    node.setName("Node " + attribSource.getAndIncrement());
    if (depth > 0) {
      node.addChildNode(samplePortfolioNode(attribSource, depth - 1));
      node.addChildNode(samplePortfolioNode(attribSource, depth - 1));
    }
    node.addPosition(samplePosition(attribSource));
    node.addPosition(samplePosition(attribSource));
    return node;
  }

  private static Portfolio samplePortfolio() {
    final AtomicInteger num = new AtomicInteger();
    final SimplePortfolioNode root = new SimplePortfolioNode();
    root.setName("Sample");
    root.addChildNode(samplePortfolioNode(num, 2));
    root.addChildNode(samplePortfolioNode(num, 2));
    return new SimplePortfolio(UniqueId.of("Test", "Sample"), "Sample", root);
  }

  private static void assertShape(final PortfolioNode portfolioNode, final Object[] tree) {
    final int numNodes = (Integer) tree[0];
    final int numPositions = (Integer) tree[1];
    assertEquals(portfolioNode.getChildNodes().size(), numNodes);
    assertEquals(portfolioNode.getPositions().size(), numPositions);
    for (int i = 0; i < numNodes; i++) {
      assertShape(portfolioNode.getChildNodes().get(i), (Object[]) tree[i + 2]);
    }
  }

  private static void print(final Trade trade, final String indent) {
    System.out.println(indent + "TRADE: " + trade.getAttributes().get("Foo"));
  }

  private static void print(final Position position, final String indent) {
    System.out.println(indent + "POSITION: " + position.getUniqueId());
    for (Trade trade : position.getTrades()) {
      print(trade, indent + "  ");
    }
  }

  private static void print(final PortfolioNode portfolioNode, final String indent) {
    System.out.println(indent + "NODE: " + portfolioNode.getName() + "/" + portfolioNode.getUniqueId());
    for (PortfolioNode childNode : portfolioNode.getChildNodes()) {
      print(childNode, indent + "  ");
    }
    for (Position position : portfolioNode.getPositions()) {
      print(position, indent + "  ");
    }
  }

  @Test
  public void testNoFilter() {
    final PortfolioFilter filter = new PortfolioFilter(new FilteringFunction() {

      @Override
      public boolean acceptPortfolioNode(PortfolioNode portfolioNode) {
        return true;
      }

      @Override
      public boolean acceptPosition(Position position) {
        return true;
      }

      @Override
      public String getName() {
        return "No filter";
      }

    });
    final Portfolio portfolio = filter.filter(samplePortfolio());
    //print(portfolio.getRootNode(), "TestNoFilter");
    assertShape(
        portfolio.getRootNode(),
        new Object[] {
            2, 0,
            new Object[] {
                2, 2,
                new Object[] {
                    2, 2,
                    new Object[] {0, 2 },
                    new Object[] {0, 2 } },
                new Object[] {
                    2, 2,
                    new Object[] {0, 2 },
                    new Object[] {0, 2 } } },
            new Object[] {
                2, 2,
                new Object[] {
                    2, 2,
                    new Object[] {0, 2 },
                    new Object[] {0, 2 } },
                new Object[] {
                    2, 2,
                    new Object[] {0, 2 },
                    new Object[] {0, 2 } } } });
  }

  @Test
  public void testWithFilter() {
    final PortfolioFilter filter = new PortfolioFilter(new AbstractFilteringFunction("Test") {
      // The default portfolio node filter will remove empty nodes
      @Override
      public boolean acceptPosition(final Position position) {
        for (Trade trade : position.getTrades ()) {
          final int attrib = Integer.parseInt(trade.getAttributes ().get ("Foo"));
          if ((attrib <= 6) || (attrib >= 33)) {
            return false;
          }
        }
        return true;
      }
    });
    final Portfolio portfolio = filter.filter(samplePortfolio());
    //print(portfolio.getRootNode(), "TestPositionFilter");
    assertShape(
        portfolio.getRootNode(),
        new Object[] {
            2, 0,
            new Object[] {
                2, 2,
                new Object[] {
                    1, 2,
                    new Object[] {0, 1 } },
                new Object[] {
                    2, 2,
                    new Object[] {0, 2 },
                    new Object[] {0, 2 } } },
            new Object[] {
                1, 0,
                new Object[] {
                    2, 2,
                    new Object[] {0, 2 },
                    new Object[] {0, 2 } } } });
  }

}
TOP

Related Classes of com.opengamma.financial.filtering.FilteringTest

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.