package com.activequant.trading.orderbook; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; import com.activequant.domainmodel.orderbook.ExecutionCanceledEvent; import com.activequant.domainmodel.orderbook.ExecutionEvent; import com.activequant.domainmodel.orderbook.MarketClosed; import com.activequant.domainmodel.orderbook.MarketOpen; import com.activequant.domainmodel.orderbook.MarketState; import com.activequant.domainmodel.orderbook.OrderBookChange; import com.activequant.domainmodel.orderbook.TransactionEvent; import com.activequant.domainmodel.trade.order.LimitOrder; import com.activequant.interfaces.trading.IOrderBookListener; import com.activequant.trading.virtual.LimitOrderBook; import com.activequant.trading.virtual.VirtualExchange; import com.activequant.transport.memory.InMemoryTransportFactory; public class LimitOrderBookTests extends TestCase { /** * @return the suite of tests being tested */ public static Test suite() { return new TestSuite(LimitOrderBookTests.class); } private int events = 0; public void testInitFromStringStringMap(){ // events = 0; IOrderBookListener iobl = new IOrderBookListener() { @Override public void transactionEvent(TransactionEvent te) { events++; } @Override public void orderBookChange(OrderBookChange obc) { // } @Override public void marketStateChange(MarketState newState) { events++; } }; // class LocalLimitOrderBook extends LimitOrderBook{ public LocalLimitOrderBook(String tradeableInstrumentId) {super(new VirtualExchange(new InMemoryTransportFactory()), tradeableInstrumentId);} public void fireTransaction(TransactionEvent te){super.transaction(te);}; public void fireMarketStateChange(MarketState newState){super.marketStateChange(newState);}; } // LocalLimitOrderBook llob = new LocalLimitOrderBook("ID"); llob.attachOrderBookListener(iobl); TransactionEvent te1 = new ExecutionEvent(); TransactionEvent te2 = new ExecutionCanceledEvent(); llob.fireTransaction(te1); llob.fireTransaction(te2); assertEquals(2, events); llob.detachOrderBookListener(iobl); llob.fireTransaction(te2); assertEquals(2, events); events = 0; llob.attachOrderBookListener(iobl); llob.fireMarketStateChange(new MarketOpen()); assertEquals("OPEN", llob.getMarketState().getType()); assertEquals(1, events); llob.fireMarketStateChange(new MarketClosed()); assertEquals("CLOSED", llob.getMarketState().getType()); assertEquals(2, events); } public void testDataRelaying(){ List<LimitOrder> list = new ArrayList<LimitOrder>(); LimitOrder l1 = new LimitOrder(); l1.setLimitPrice(100.0); LimitOrder l2 = new LimitOrder(); l2.setLimitPrice(200.0); list.add(l1); list.add(l2); Collections.sort(list, new Comparator<LimitOrder>() { @Override public int compare(LimitOrder o1, LimitOrder o2) { return (int) (o2.getLimitPrice() - o1.getLimitPrice()); } }); for (LimitOrder l : list) { System.out.println(l.getLimitPrice()); } } }