Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdafx.h>
- #include <gtest/gtest.h>
- #include <gmock/gmock.h>
- #include "texas/engine/MatcherNode.h"
- #include "texas/domain/OrderMock.h"
- using namespace testing;
- namespace texas {
- namespace engine {
- class MatcherNodeStubbed : public MatcherNode {
- public:
- MatcherNodeStubbed(IOrderPtr order, bool checkResult)
- : MatcherNode(order), m_checkResult(checkResult) { }
- MatcherNodeStubbed(IOrderPtr order) : MatcherNodeStubbed(order, false) { }
- virtual ~MatcherNodeStubbed() { }
- virtual bool CheckActivationConditions() { return m_checkResult; }
- virtual void SetCheckActivationConditionsResult(bool result) { m_checkResult = result; }
- private:
- bool m_checkResult;
- };
- class MatcherNodeTest : public Test {
- protected:
- ISecurityPtr m_security;
- IOrderPtr m_order;
- OrderMockPtr m_orderMock;
- MatcherNodePtr m_node;
- TickPtr m_tick1, m_tick2;
- virtual void SetUp() override {
- m_security = Security::NewRandom();
- m_order = Order::NewRandom(m_security);
- m_orderMock = make_shared<OrderMock>();
- m_node = make_shared<MatcherNodeStubbed>(m_order);
- m_tick1 = make_shared<Tick>(1, DateTime::New(2001, 9, 11, 8, 0, 0, 0), Decimal::New(42.13, 2), 1000);
- m_tick2 = make_shared<Tick>(Decimal::New(43.48, 2), 1100);
- }
- virtual void TearDown() override {
- }
- };
- TEST_F(MatcherNodeTest, TestGetters) {
- ASSERT_EQ(m_security, m_node->GetSecurity());
- ASSERT_EQ(m_order, m_node->GetOrder());
- }
- TEST_F(MatcherNodeTest, TestGetBidPriceMinusPenny) {
- m_security->SetBidPrice(Decimal::New(120.05, 2));
- ASSERT_TRUE(Decimal(120.04, 2).Equals(m_node->GetBidPriceMinusPenny()));
- }
- TEST_F(MatcherNodeTest, TestGetAskPriceMinusPenny) {
- m_security->SetAskPrice(Decimal::New(280.22, 2));
- ASSERT_TRUE(Decimal(280.21, 2).Equals(m_node->GetAskPriceMinusPenny()));
- }
- TEST_F(MatcherNodeTest, TestGetBidPricePlusPenny) {
- m_security->SetBidPrice(Decimal::New(44.13, 2));
- ASSERT_TRUE(Decimal(44.14, 2).Equals(m_node->GetBidPricePlusPenny()));
- }
- TEST_F(MatcherNodeTest, TestGetAskPricePlusPenny) {
- m_security->SetAskPrice(Decimal::New(82.91, 2));
- ASSERT_TRUE(Decimal(82.92, 2).Equals(m_node->GetAskPricePlusPenny()));
- }
- TEST_F(MatcherNodeTest, TestIsActive) {
- m_node = make_shared<MatcherNodeStubbed>(m_orderMock);
- EXPECT_CALL(*m_orderMock, IsActive())
- .WillOnce(Return(true))
- .WillOnce(Return(false));
- ASSERT_TRUE(m_node->IsActive());
- ASSERT_FALSE(m_node->IsActive());
- }
- TEST_F(MatcherNodeTest, TestIsTopActive) {
- m_order->SetStatus(OrderStatus::TopActive);
- ASSERT_TRUE(m_node->IsTopActive());
- m_order->SetStatus(OrderStatus::Active);
- ASSERT_FALSE(m_node->IsTopActive());
- m_order->SetStatus(OrderStatus::Cancelled);
- ASSERT_FALSE(m_node->IsTopActive());
- m_order->SetStatus(OrderStatus::Expired);
- ASSERT_FALSE(m_node->IsTopActive());
- m_order->SetStatus(OrderStatus::Filled);
- ASSERT_FALSE(m_node->IsTopActive());
- m_order->SetStatus(OrderStatus::MatchPending);
- ASSERT_FALSE(m_node->IsTopActive());
- m_order->SetStatus(OrderStatus::NonActive);
- ASSERT_FALSE(m_node->IsTopActive());
- m_order->SetStatus(OrderStatus::Matched);
- ASSERT_FALSE(m_node->IsTopActive());
- }
- TEST_F(MatcherNodeTest, TestIsCancelled) {
- m_node = make_shared<MatcherNodeStubbed>(m_orderMock);
- EXPECT_CALL(*m_orderMock, IsCancelled())
- .WillOnce(Return(false))
- .WillOnce(Return(true));
- ASSERT_FALSE(m_node->IsCancelled());
- ASSERT_TRUE(m_node->IsCancelled());
- }
- TEST_F(MatcherNodeTest, TestIsExpired) {
- m_node = make_shared<MatcherNodeStubbed>(m_orderMock);
- EXPECT_CALL(*m_orderMock, IsExpired())
- .WillOnce(Return(true))
- .WillOnce(Return(false));
- ASSERT_TRUE(m_node->IsExpired());
- ASSERT_FALSE(m_node->IsExpired());
- }
- TEST_F(MatcherNodeTest, TestIsNotActive) {
- m_node = make_shared<MatcherNodeStubbed>(m_orderMock);
- EXPECT_CALL(*m_orderMock, IsNotActive())
- .WillOnce(Return(false))
- .WillOnce(Return(true));
- ASSERT_FALSE(m_node->IsNotActive());
- ASSERT_TRUE(m_node->IsNotActive());
- }
- TEST_F(MatcherNodeTest, TestSetGetRank) {
- ASSERT_EQ(0, m_node->GetRank());
- m_node->SetRank(256);
- ASSERT_EQ(256, m_node->GetRank());
- }
- TEST_F(MatcherNodeTest, TestMarkAsTopActive) {
- m_node->MarkAsTopActive();
- ASSERT_EQ(OrderStatus::TopActive, m_order->GetStatus());
- }
- TEST_F(MatcherNodeTest, TestGetSize) {
- m_node = make_shared<MatcherNodeStubbed>(m_orderMock);
- EXPECT_CALL(*m_orderMock, GetSize()).WillOnce(Return(220));
- ASSERT_EQ(220, m_node->GetSize());
- }
- TEST_F(MatcherNodeTest, TestGetOrderId) {
- m_node = make_shared<MatcherNodeStubbed>(m_orderMock);
- EXPECT_CALL(*m_orderMock, GetId()).WillOnce(Return(128951));
- ASSERT_EQ(128951, m_node->GetOrderId());
- }
- TEST_F(MatcherNodeTest, TestGetCustomerId) {
- m_node = make_shared<MatcherNodeStubbed>(m_orderMock);
- EXPECT_CALL(*m_orderMock, GetCustomerId()).WillOnce(Return(159128));
- ASSERT_EQ(159128, m_node->GetCustomerId());
- }
- TEST_F(MatcherNodeTest, TestApplyActivationConditions) {
- auto order1 = Order::NewRandom(m_security);
- auto order2 = Order::NewRandom(m_security);
- auto node1 = make_shared<MatcherNodeStubbed>(order1);
- auto node2 = make_shared<MatcherNodeStubbed>(order2);
- node1->SetCheckActivationConditionsResult(true);
- node2->SetCheckActivationConditionsResult(false);
- ASSERT_TRUE(node1->ApplyActivationConditions());
- ASSERT_EQ(OrderStatus::Active, order1->GetStatus());
- ASSERT_FALSE(node2->ApplyActivationConditions());
- ASSERT_EQ(OrderStatus::NonActive, order2->GetStatus());
- }
- TEST_F(MatcherNodeTest, TestAddExecution) {
- auto e1 = make_shared<Execution>();
- auto e2 = make_shared<Execution>();
- m_node->AddExecution(e1);
- m_node->AddExecution(e2);
- ASSERT_EQ(e1, m_node->GetExecution(0));
- ASSERT_EQ(e2, m_node->GetExecution(1));
- }
- TEST_F(MatcherNodeTest, TestAddExecution_ThrowsIfNullPtr) {
- ASSERT_THROW(m_node->AddExecution(ExecutionPtr()), std::exception);
- }
- TEST_F(MatcherNodeTest, TestOpenExecution) {
- auto buyer = make_shared<MatcherNodeStubbed>(Order::NewRandomLP_B(1, m_security));
- auto seller = make_shared<MatcherNodeStubbed>(Order::NewRandomLP_S(1, m_security));
- m_security->SetBidPrice(Decimal::New(112.34, 2));
- m_security->SetAskPrice(Decimal::New(98.125, 3));
- m_security->SetBidSize(894);
- m_security->SetAskSize(900);
- auto x = buyer->OpenExecution(228);
- ASSERT_TRUE((bool)x);
- ASSERT_TRUE((bool)x->GetSnapShot1());
- ASSERT_TRUE(x->GetSnapShot1()
- ->Equals(Tick(228, DateTime::Current(), Decimal::New(112.34, 2), 894)));
- x = seller->OpenExecution(442);
- ASSERT_TRUE((bool)x);
- ASSERT_TRUE((bool)x->GetSnapShot1());
- ASSERT_TRUE(x->GetSnapShot1()
- ->Equals(Tick(442, DateTime::Current(), Decimal::New(98.125, 3), 900)));
- }
- TEST_F(MatcherNodeTest, TestCloseExecution) {
- auto buyer = make_shared<MatcherNodeStubbed>(Order::NewRandomLP_B(1, m_security));
- auto seller = make_shared<MatcherNodeStubbed>(Order::NewRandomLP_S(1, m_security));
- m_security->SetBidPrice(Decimal::New(24.12, 2));
- m_security->SetAskPrice(Decimal::New(10.15, 2));
- m_security->SetBidSize(871);
- m_security->SetAskSize(130);
- auto x = buyer->OpenExecution(526);
- buyer->CloseExecution();
- ASSERT_TRUE((bool)x);
- ASSERT_TRUE((bool)x->GetSnapShot2());
- ASSERT_TRUE(x->GetSnapShot2()
- ->Equals(Tick(526, DateTime::Current(), Decimal::New(24.12, 2), 871)));
- x = seller->OpenExecution(882);
- seller->CloseExecution();
- ASSERT_TRUE((bool)x);
- ASSERT_TRUE((bool)x->GetSnapShot2());
- ASSERT_TRUE(x->GetSnapShot2()
- ->Equals(Tick(882, DateTime::Current(), Decimal::New(10.15, 2), 130)));
- }
- TEST_F(MatcherNodeTest, TestCloseExecution_ThrowsIfNotStarted) {
- ASSERT_THROW(m_node->CloseExecution(), std::exception);
- }
- TEST_F(MatcherNodeTest, TestGetExecution_EmptyPtrIfNotExists) {
- ASSERT_EQ(ExecutionPtr(), m_node->GetExecution(0));
- ASSERT_EQ(ExecutionPtr(), m_node->GetExecution(1));
- ASSERT_EQ(ExecutionPtr(), m_node->GetExecution(1024));
- }
- TEST_F(MatcherNodeTest, TestGetExecution) {
- auto x1 = m_node->OpenExecution(1);
- auto x2 = m_node->OpenExecution(2);
- auto x3 = m_node->OpenExecution(3);
- ASSERT_EQ(x1, m_node->GetExecution(0));
- ASSERT_EQ(x2, m_node->GetExecution(1));
- ASSERT_EQ(x3, m_node->GetExecution(2));
- }
- TEST_F(MatcherNodeTest, TestGetExecutionSnapShot1_SafeForWrongIndex) {
- ASSERT_FALSE((bool)m_node->GetExecutionSnapShot1());
- ASSERT_FALSE((bool)m_node->GetExecutionSnapShot1(1));
- ASSERT_FALSE((bool)m_node->GetExecutionSnapShot1(2000));
- }
- TEST_F(MatcherNodeTest, TestGetExecutionSnapShot2_SafeForWrongIndex) {
- ASSERT_FALSE((bool)m_node->GetExecutionSnapShot2());
- ASSERT_FALSE((bool)m_node->GetExecutionSnapShot2(1));
- ASSERT_FALSE((bool)m_node->GetExecutionSnapShot2(2000));
- }
- TEST_F(MatcherNodeTest, TestGetExecutionSnapShot1) {
- auto x1 = m_node->OpenExecution(215);
- auto x2 = m_node->OpenExecution(216);
- x1->SetSnapShot1(m_tick1);
- x2->SetSnapShot1(m_tick2);
- ASSERT_EQ(m_tick1, m_node->GetExecutionSnapShot1(0));
- ASSERT_EQ(m_tick2, m_node->GetExecutionSnapShot1(1));
- }
- TEST_F(MatcherNodeTest, TestGetExecutionSnapShot2) {
- auto x1 = m_node->OpenExecution(215);
- auto x2 = m_node->OpenExecution(216);
- x1->SetSnapShot2(m_tick1);
- x2->SetSnapShot2(m_tick2);
- ASSERT_EQ(m_tick1, m_node->GetExecutionSnapShot2(0));
- ASSERT_EQ(m_tick2, m_node->GetExecutionSnapShot2(1));
- }
- TEST_F(MatcherNodeTest, TestGetSetMatch) {
- auto x = m_node->GetMatch();
- ASSERT_FALSE((bool)x);
- auto time = DateTime::Current();
- x = make_shared<Tick>(99999, time, Decimal::New(524.28, 2), 10);
- m_node->SetMatch(x);
- ASSERT_EQ(x, m_node->GetMatch());
- }
- TEST_F(MatcherNodeTest, TestSetOrderStatus) {
- m_node->SetOrderStatus(OrderStatus::Filled);
- ASSERT_EQ(OrderStatus::Filled, m_order->GetStatus());
- m_node->SetOrderStatus(OrderStatus::Matched);
- ASSERT_EQ(OrderStatus::Matched, m_order->GetStatus());
- }
- TEST_F(MatcherNodeTest, TestFailedExecutionCounter) {
- ASSERT_EQ(0, m_node->GetFailedExecutionCounter());
- ASSERT_EQ(1, m_node->IncrementFailedExecutionCounter());
- ASSERT_EQ(1, m_node->GetFailedExecutionCounter());
- ASSERT_EQ(2, m_node->IncrementFailedExecutionCounter());
- ASSERT_EQ(3, m_node->IncrementFailedExecutionCounter());
- ASSERT_EQ(4, m_node->IncrementFailedExecutionCounter());
- ASSERT_EQ(4, m_node->GetFailedExecutionCounter());
- }
- TEST_F(MatcherNodeTest, TestGetSnapShotOfCurrentPriceAndSize_B) {
- auto node = make_shared<MatcherNodeStubbed>(Order::NewRandomLP_B(1, m_security));
- m_security->SetBidPrice(Decimal::New(112.34, 2));
- m_security->SetBidSize(894);
- auto x = node->GetSnapShotOfCurrentPriceAndSize(1025);
- ASSERT_TRUE((bool)x);
- ASSERT_TRUE(x->Equals(Tick(1025, DateTime::Current(), Decimal::New(112.34, 2), 894)));
- }
- TEST_F(MatcherNodeTest, TestGetSnapShotOfCurrentPriceAndSize_S) {
- auto node = make_shared<MatcherNodeStubbed>(Order::NewRandomLP_S(1, m_security));
- m_security->SetAskPrice(Decimal::New(98.125, 3));
- m_security->SetAskSize(900);
- auto x = node->GetSnapShotOfCurrentPriceAndSize(825);
- ASSERT_TRUE((bool)x);
- ASSERT_TRUE(x->Equals(Tick(825, DateTime::Current(), Decimal::New(98.125, 3), 900)));
- }
- TEST_F(MatcherNodeTest, TestIsExecutionGranted) {
- m_node = make_shared<MatcherNodeStubbed>(m_orderMock);
- EXPECT_CALL(*m_orderMock, GetStatus())
- .WillOnce(Return(OrderStatus::Active))
- .WillOnce(Return(OrderStatus::Matched));
- ASSERT_FALSE(m_node->IsExecutionGranted());
- ASSERT_TRUE(m_node->IsExecutionGranted());
- }
- TEST_F(MatcherNodeTest, TestGetExecutionCounter) {
- ASSERT_EQ(0, m_node->GetExecutionCounter());
- m_node->OpenExecution(1);
- ASSERT_EQ(1, m_node->GetExecutionCounter());
- m_node->OpenExecution(2);
- ASSERT_EQ(2, m_node->GetExecutionCounter());
- ASSERT_EQ(2, m_node->GetExecutionCounter());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement