public void TryCount(int numUsers, int numOrders, int numThreads)
        {
            for (int i = 0; i < numUsers; i++)
            {
                _engine.EPAdministrator.CreateEPL("@Name('create_" + i + "') create window MyWindow_" + i + "#unique(OrderId) as select * from OrderEvent");
                _engine.EPAdministrator.CreateEPL("@Name('insert_" + i + "') insert into MyWindow_" + i + " select * from OrderEvent(UserId = 'user" + i + "')");
                _engine.EPAdministrator.CreateEPL("on OrderCancelEvent as d delete from MyWindow_" + i + " w where w.OrderId = d.OrderId");
                _engine.EPAdministrator.CreateEPL("@Name('select_" + i + "') on OrderEvent as s select sum(w.Price) from MyWindow_" + i + " w where w.Side = s.Side group by w.Side");
            }

            RunnableOrderSim[] runnables = new RunnableOrderSim[numThreads];
            Thread[]           threads   = new Thread[numThreads];
            for (int i = 0; i < numThreads; i++)
            {
                runnables[i] = new RunnableOrderSim(_engine, i, numUsers, numOrders);
                threads[i]   = new Thread(runnables[i].Run);
            }

            for (int i = 0; i < threads.Length; i++)
            {
                threads[i].Start();
            }

            for (int i = 0; i < threads.Length; i++)
            {
                threads[i].Join();
                Assert.IsTrue(runnables[i].Status);
            }
        }
        public void TryCount(
            RegressionEnvironment env,
            int numUsers,
            int numOrders,
            int numThreads)
        {
            var path = new RegressionPath();
            for (var i = 0; i < numUsers; i++) {
                env.CompileDeploy(
                    "@Name('create_" +
                    i +
                    "') create window MyWindow_" +
                    i +
                    "#unique(OrderId) as select * from OrderEvent",
                    path);
                env.CompileDeploy(
                    "@Name('insert_" +
                    i +
                    "') insert into MyWindow_" +
                    i +
                    " select * from OrderEvent(UserId = 'user" +
                    i +
                    "')",
                    path);
                env.CompileDeploy(
                    "on OrderCancelEvent as d delete from MyWindow_" + i + " w where w.OrderId = d.OrderId",
                    path);
                env.CompileDeploy(
                    "@Name('select_" +
                    i +
                    "') on OrderEvent as s select sum(w.Price) from MyWindow_" +
                    i +
                    " w where w.Side = s.Side group by w.Side",
                    path);
            }

            var runnables = new RunnableOrderSim[numThreads];
            var threads = new Thread[numThreads];
            for (var i = 0; i < numThreads; i++) {
                runnables[i] = new RunnableOrderSim(env.Runtime, i, numUsers, numOrders);
                threads[i] = new Thread(runnables[i].Run) {
                    Name = typeof(MultithreadStmtNamedWindowMultiple).Name
                };
            }

            for (var i = 0; i < threads.Length; i++) {
                threads[i].Start();
            }

            for (var i = 0; i < threads.Length; i++) {
                SupportCompileDeployUtil.ThreadJoin(threads[i]);
                Assert.IsTrue(runnables[i].Status);
            }

            env.UndeployAll();
        }
        public void TryCount(EPServiceProvider epService, int numUsers, int numOrders, int numThreads)
        {
            for (var i = 0; i < numUsers; i++)
            {
                epService.EPAdministrator.CreateEPL(
                    "@Name('create_" + i + "') create window MyWindow_" + i +
                    "#unique(orderId) as select * from OrderEvent");
                epService.EPAdministrator.CreateEPL(
                    "@Name('insert_" + i + "') insert into MyWindow_" + i + " select * from OrderEvent(userId = 'user" +
                    i + "')");
                epService.EPAdministrator.CreateEPL(
                    "on OrderCancelEvent as d delete from MyWindow_" + i + " w where w.orderId = d.orderId");
                epService.EPAdministrator.CreateEPL(
                    "@Name('select_" + i + "') on OrderEvent as s select sum(w.price) from MyWindow_" + i +
                    " w where w.side = s.side group by w.side");
            }

            var runnables = new RunnableOrderSim[numThreads];
            var threads = new Thread[numThreads];
            for (var i = 0; i < numThreads; i++)
            {
                runnables[i] = new RunnableOrderSim(epService, i, numUsers, numOrders);
                threads[i] = new Thread(runnables[i].Run);
            }

            for (var i = 0; i < threads.Length; i++)
            {
                threads[i].Start();
            }

            for (var i = 0; i < threads.Length; i++)
            {
                threads[i].Join();
                Assert.IsTrue(runnables[i].Status);
            }
        }