public void TestPOrderBidAskCountManagerAll()
        {
            POrderBidAskCountManager manager = POrderBidAskCountManager.Ins();
            Assert.AreEqual(POrderBidAskCountManager.Ins().IsDirty(), false);
            Assert.AreEqual(POrder_UnittestUtil.IsPOrderCommonResourceDirty(), false);

            POrderBidAskCountManager_Accessor accessor =
                new POrderBidAskCountManager_Accessor(new PrivateObject(manager));

            Account simAccount = StrategyManager.Ins().GetAccount("SimBond");

            String codeNoTail = BondUtil.GetCodeNoTail(BondUtil.HouseBond_1.Code);

            // 일반 등록
            String codeNormal =
                BondUtil.GetCodeWithMarketType(BondUtil.HouseBond_1.Code, MarketType._0_Bond_일반);
            RmdManager.Ins().BondSpot.Register(codeNormal);
            RawMarketData rmdNormal = RmdManager.Ins().BondSpot.GetData(codeNormal);

            // 소액 등록
            String codeSmall =
                BondUtil.GetCodeWithMarketType(BondUtil.HouseBond_1.Code, MarketType._1_Bond_소액);
            RmdManager.Ins().BondSpot.Register(codeSmall);
            RawMarketData rmdSmall = RmdManager.Ins().BondSpot.GetData(codeSmall);

            POrder oNormal_0 = new POrder(TradingDirection.Long, codeNormal, 100 * CommonConst._1_000_000, 8888, simAccount, rmdNormal, MarketType._0_Bond_일반, true);
            oNormal_0.Update(oNormal_0.ReqCount, 0, true);

            // 100개 매수 등록해놓고
            manager.Register(oNormal_0);
            long registeredReqCount = manager.GetRegisteredReqCount(codeNormal, TradingDirection.Long, 8888);
            Assert.AreEqual(registeredReqCount, 100 * CommonConst._1_000_000);

            // 200개 더 등록해보고
            POrder oNormal_1 = new POrder(TradingDirection.Long, codeNormal, 200 * CommonConst._1_000_000, 8888, simAccount, rmdNormal, MarketType._0_Bond_일반, true);
            oNormal_1.Update(oNormal_1.ReqCount, 0, true);
            manager.Register(oNormal_1);
            registeredReqCount = manager.GetRegisteredReqCount(codeNormal, TradingDirection.Long, 8888);
            Assert.AreEqual(registeredReqCount, 300 * CommonConst._1_000_000);

            // 다른 가격(8889)에서 어떤지 보고
            registeredReqCount = manager.GetRegisteredReqCount(codeNormal, TradingDirection.Long, 8889);
            Assert.AreEqual(registeredReqCount, 0 * CommonConst._1_000_000);

            // 다른 가격에 등록한 것이 영향을 안주는지 확인하고
            POrder oNormal_2 = new POrder(TradingDirection.Long, codeNormal, 200 * CommonConst._1_000_000, 8889, simAccount, rmdNormal, MarketType._0_Bond_일반, true);
            oNormal_2.Update(oNormal_2.ReqCount, 0, true);
            manager.Register(oNormal_2);
            registeredReqCount = manager.GetRegisteredReqCount(codeNormal, TradingDirection.Long, 8888);
            Assert.AreEqual(registeredReqCount, 300 * CommonConst._1_000_000);

            // Short으로도 같은 가격에 넣어보고
            POrder oNormal_3 = new POrder(TradingDirection.Short, codeNormal, 100 * CommonConst._1_000_000, 8888, simAccount, rmdNormal, MarketType._0_Bond_일반, true);
            oNormal_3.Update(oNormal_3.ReqCount, 0, true);
            manager.Register(oNormal_3);
            registeredReqCount = manager.GetRegisteredReqCount(codeNormal, TradingDirection.Long, 8888);
            Assert.AreEqual(registeredReqCount, 300 * CommonConst._1_000_000);
            registeredReqCount = manager.GetRegisteredReqCount(codeNormal, TradingDirection.Short, 8888);
            Assert.AreEqual(registeredReqCount, 100 * CommonConst._1_000_000);

            // 다른 코드(소액)으로 테스트 시작

            registeredReqCount = manager.GetRegisteredReqCount(codeSmall, TradingDirection.Short, 8888);
            Assert.AreEqual(registeredReqCount, 0);

            POrder oSmall_0 = new POrder(TradingDirection.Long, codeSmall, 100 * CommonConst._1_000, 8888, simAccount, rmdSmall, MarketType._1_Bond_소액, true);
            oSmall_0.Update(oSmall_0.ReqCount, 0, true);

            // 100개 넣어보고
            manager.Register(oSmall_0);
            registeredReqCount = manager.GetRegisteredReqCount(codeSmall, TradingDirection.Short, 8888);
            Assert.AreEqual(registeredReqCount, 0 * CommonConst._1_000);

            registeredReqCount = manager.GetRegisteredReqCount(codeSmall, TradingDirection.Long, 8888);
            Assert.AreEqual(registeredReqCount, 100 * CommonConst._1_000);

            registeredReqCount = manager.GetRegisteredReqCount(codeNormal, TradingDirection.Long, 8888);
            Assert.AreEqual(registeredReqCount, 300 * CommonConst._1_000_000);

            manager.Unregister(oNormal_0);
            manager.Unregister(oNormal_1);
            manager.Unregister(oNormal_2);
            manager.Unregister(oNormal_3);
            registeredReqCount = manager.GetRegisteredReqCount(codeNormal, TradingDirection.Long, 8888);
            Assert.AreEqual(registeredReqCount, 0);

            manager.Unregister(oSmall_0);
            registeredReqCount = manager.GetRegisteredReqCount(codeNormal, TradingDirection.Long, 8888);
            Assert.AreEqual(registeredReqCount, 0);

            // AdjustRmdCountWithoutMine 테스트

            rmdNormal.BidPrice1 = 8887;
            rmdNormal.BidCount1 = 1000 * CommonConst._1_000_000;
            rmdNormal.AskPrice1 = 8888;
            rmdNormal.AskCount1 = 1000 * CommonConst._1_000_000;

            manager.AdjustRmdCountWithoutMine(ref rmdNormal);

            Assert.AreEqual(rmdNormal.BidCount1, 1000 * CommonConst._1_000_000);
            Assert.AreEqual(rmdNormal.AskCount1, 1000 * CommonConst._1_000_000);

            POrder oNormal_4 = new POrder(TradingDirection.Long, codeNormal, 100 * CommonConst._1_000_000, 8888, simAccount, rmdNormal, MarketType._0_Bond_일반, true);
            oNormal_4.Update(oNormal_4.ReqCount, 0, true);

            manager.Register(oNormal_4);
            manager.AdjustRmdCountWithoutMine(ref rmdNormal);

            Assert.AreEqual(rmdNormal.BidCount1, 1000 * CommonConst._1_000_000);
            Assert.AreEqual(rmdNormal.AskCount1, 900 * CommonConst._1_000_000);

            rmdNormal.BidPrice1 = 8887;
            rmdNormal.BidCount1 = 1000 * CommonConst._1_000_000;
            rmdNormal.AskPrice1 = 8888;
            rmdNormal.AskCount1 = 1000 * CommonConst._1_000_000;

            POrder oNormal_5 = new POrder(TradingDirection.Long, codeNormal, 100 * CommonConst._1_000_000, 8888, simAccount, rmdNormal, MarketType._0_Bond_일반, true);
            oNormal_5.Update(oNormal_5.ReqCount, 0, true);

            manager.Register(oNormal_5);
            manager.AdjustRmdCountWithoutMine(ref rmdNormal);

            Assert.AreEqual(rmdNormal.BidCount1, 1000 * CommonConst._1_000_000);
            Assert.AreEqual(rmdNormal.AskCount1, 800 * CommonConst._1_000_000);

            rmdNormal.BidPrice1 = 8887;
            rmdNormal.BidCount1 = 1000 * CommonConst._1_000_000;
            rmdNormal.AskPrice1 = 8888;
            rmdNormal.AskCount1 = 1000 * CommonConst._1_000_000;

            POrder oNormal_6 = new POrder(TradingDirection.Short, codeNormal, 100 * CommonConst._1_000_000, 8887, simAccount, rmdNormal, MarketType._0_Bond_일반, true);
            oNormal_6.Update(oNormal_6.ReqCount, 0, true);

            manager.Register(oNormal_6);
            manager.AdjustRmdCountWithoutMine(ref rmdNormal);

            Assert.AreEqual(rmdNormal.BidCount1, 900 * CommonConst._1_000_000);
            Assert.AreEqual(rmdNormal.AskCount1, 800 * CommonConst._1_000_000);

            // 0이하가 안나온다

            POrder oNormal_7 = new POrder(TradingDirection.Short, codeNormal, 10000 * CommonConst._1_000_000, 8887, simAccount, rmdNormal, MarketType._0_Bond_일반, true);
            manager.Register(oNormal_7);
            manager.AdjustRmdCountWithoutMine(ref rmdNormal);
            Assert.AreEqual(rmdNormal.BidCount1, 0);

            manager.Unregister(oNormal_4);
            manager.Unregister(oNormal_5);
            manager.Unregister(oNormal_6);
            manager.Unregister(oNormal_7);

            Assert.AreEqual(POrderBidAskCountManager.Ins().IsDirty(), false);
            Assert.AreEqual(POrder_UnittestUtil.IsPOrderCommonResourceDirty(), false);
        }
 public static void ForcedClearPOrderBidAskManager()
 {
     POrderBidAskCountManager_Accessor accessor = new POrderBidAskCountManager_Accessor(new PrivateObject(POrderBidAskCountManager.Ins()));
     accessor._goalPOrderCount.Clear();
 }