public IEnumerable <Turn> Materialize(Random Random, IEnumerable <Army> Armies) { var armies = Armies.ToArray(); var deployOrder = DeploymentOrder.Get(Random, 1).Select(i => armies[i]); foreach (var army in deployOrder) { yield return(new Turn(0, new TurnInfo(army, TurnComponent.DEPLOYMENT))); } foreach (var army in deployOrder) { yield return(new Turn(0, new TurnInfo(army, TurnComponent.RESET))); } var playerOrder = TurnOrder.Get(Random, Turns).Select(i => armies[i]).GetEnumerator(); for (int i = 0; i < Turns; ++i) { for (int j = 0; j < TurnOrder.Count; ++j) { playerOrder.MoveNext(); foreach (var turnComponent in TurnComponents()) { yield return(new Turn((byte)(i + 1), new TurnInfo(playerOrder.Current, turnComponent))); } } } }
private void RunAssertionCircular(EPServiceProvider epService) { // Circular 3 Module moduleB = GetModule("B", "C"); Module moduleC = GetModule("C", "D"); Module moduleD = GetModule("D", "B"); try { epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleC, moduleD, moduleB }), new DeploymentOrderOptions()); Assert.Fail(); } catch (DeploymentOrderException ex) { Assert.AreEqual("Circular dependency detected in module uses-relationships: module 'C' uses (depends on) module 'D' uses (depends on) module 'B'", ex.Message); } // Circular 1 - this is allowed moduleB = GetModule("B", "B"); DeploymentOrder order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleC, moduleD, moduleB }), new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleD, moduleC }, order); // Circular 2 moduleB = GetModule("B", "C"); moduleC = GetModule("C", "B"); try { epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleC, moduleB }), new DeploymentOrderOptions()); Assert.Fail(); } catch (DeploymentOrderException ex) { Assert.AreEqual("Circular dependency detected in module uses-relationships: module 'C' uses (depends on) module 'B'", ex.Message); } // turn off circular check var options = new DeploymentOrderOptions(); options.IsCheckCircularDependency = false; order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleC, moduleB }), options); AssertOrder(new Module[] { moduleB, moduleC }, order); }
public void TestCircular() { // Circular 3 Module moduleB = GetModule("B", "C"); Module moduleC = GetModule("C", "D"); Module moduleD = GetModule("D", "B"); try { _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleC, moduleD, moduleB }, new DeploymentOrderOptions()); Assert.Fail(); } catch (DeploymentOrderException ex) { Assert.AreEqual("Circular dependency detected in module uses-relationships: module 'C' uses (depends on) module 'D' uses (depends on) module 'B'", ex.Message); } // Circular 1 - this is allowed moduleB = GetModule("B", "B"); DeploymentOrder order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleC, moduleD, moduleB }, new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleD, moduleC, }, order); // Circular 2 moduleB = GetModule("B", "C"); moduleC = GetModule("C", "B"); try { _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleC, moduleB }, new DeploymentOrderOptions()); Assert.Fail(); } catch (DeploymentOrderException ex) { Assert.AreEqual("Circular dependency detected in module uses-relationships: module 'C' uses (depends on) module 'B'", ex.Message); } // turn off circular check DeploymentOrderOptions options = new DeploymentOrderOptions(); options.IsCheckCircularDependency = false; order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleC, moduleB }, options); AssertOrder(new Module[] { moduleB, moduleC }, order); }
private void RunAssertionOrder(EPServiceProvider epService) { Module moduleA = null; Module moduleB = null; Module moduleC = null; Module moduleD = null; Module moduleE = null; DeploymentOrder order = null; // Tree of 4 deep moduleA = GetModule("A"); moduleB = GetModule("B", "A"); moduleC = GetModule("C", "A", "B", "D"); moduleD = GetModule("D", "A", "B"); order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleC, moduleD, moduleB, moduleA }), new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleA, moduleB, moduleD, moduleC }, order); // Zero items order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] {}), new DeploymentOrderOptions()); AssertOrder(new Module[] {}, order); // 1 item moduleA = GetModule("A"); order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleA }), new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleA }, order); // 2 item moduleA = GetModule("A", "B"); moduleB = GetModule("B"); order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleB, moduleA }), new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleA }, order); // 3 item moduleB = GetModule("B"); moduleC = GetModule("C", "B"); moduleD = GetModule("D"); order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleB, moduleC, moduleD }), new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleC, moduleD }, order); order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleD, moduleC, moduleB }), new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleD, moduleC }, order); // 2 trees of 2 deep moduleA = GetModule("A", "B"); moduleB = GetModule("B"); moduleC = GetModule("C", "D"); moduleD = GetModule("D"); order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleC, moduleB, moduleA, moduleD }), new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleD, moduleC, moduleA }, order); // Tree of 5 deep moduleA = GetModule("A", "C"); moduleB = GetModule("B"); moduleC = GetModule("C", "B"); moduleD = GetModule("D", "C", "E"); moduleE = GetModule("E"); order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleA, moduleB, moduleC, moduleD, moduleE }), new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleC, moduleE, moduleA, moduleD }, order); order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleB, moduleE, moduleC, moduleA, moduleD }), new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleE, moduleC, moduleA, moduleD }, order); order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleA, moduleD, moduleE, moduleC, moduleB }), new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleE, moduleC, moduleA, moduleD }, order); // Tree with null names moduleA = GetModule(null, "C", "A", "B", "D"); moduleB = GetModule(null, "C"); moduleC = GetModule("A"); moduleD = GetModule("B", "A", "C"); moduleE = GetModule("C"); var options = new DeploymentOrderOptions(); options.IsCheckUses = false; order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleA, moduleB, moduleC, moduleD, moduleE }), options); AssertOrder(new Module[] { moduleC, moduleE, moduleD, moduleA, moduleB }, order); Assert.IsFalse(epService.EPAdministrator.DeploymentAdmin.IsDeployed("C")); // Tree with duplicate names moduleA = GetModule("A", "C"); moduleB = GetModule("B", "C"); moduleC = GetModule("A", "B"); moduleD = GetModule("D", "A"); moduleE = GetModule("C"); order = epService.EPAdministrator.DeploymentAdmin.GetDeploymentOrder(Collections.List(new Module[] { moduleA, moduleB, moduleC, moduleD, moduleE }), options); AssertOrder(new Module[] { moduleE, moduleB, moduleA, moduleC, moduleD }, order); }
private void AssertOrder(Module[] ordered, DeploymentOrder order) { EPAssertionUtil.AssertEqualsExactOrder(ordered, order.Ordered.ToArray()); }
public void TestOrder() { Module moduleA = null; Module moduleB = null; Module moduleC = null; Module moduleD = null; Module moduleE = null; DeploymentOrder order = null; // Tree of 4 deep moduleA = GetModule("A"); moduleB = GetModule("B", "A"); moduleC = GetModule("C", "A", "B", "D"); moduleD = GetModule("D", "A", "B"); order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleC, moduleD, moduleB, moduleA }, new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleA, moduleB, moduleD, moduleC }, order); // Zero items order = _deploymentAdmin.GetDeploymentOrder(new Module[] {}, new DeploymentOrderOptions()); AssertOrder(new Module[] {}, order); // 1 item moduleA = GetModule("A"); order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleA }, new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleA }, order); // 2 item moduleA = GetModule("A", "B"); moduleB = GetModule("B"); order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleB, moduleA }, new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleA }, order); // 3 item moduleB = GetModule("B"); moduleC = GetModule("C", "B"); moduleD = GetModule("D"); order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleB, moduleC, moduleD }, new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleC, moduleD }, order); order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleD, moduleC, moduleB }, new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleD, moduleC }, order); // 2 trees of 2 deep moduleA = GetModule("A", "B"); moduleB = GetModule("B"); moduleC = GetModule("C", "D"); moduleD = GetModule("D"); order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleC, moduleB, moduleA, moduleD }, new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleD, moduleC, moduleA }, order); // Tree of 5 deep moduleA = GetModule("A", "C"); moduleB = GetModule("B"); moduleC = GetModule("C", "B"); moduleD = GetModule("D", "C", "E"); moduleE = GetModule("E"); order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleA, moduleB, moduleC, moduleD, moduleE }, new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleC, moduleE, moduleA, moduleD }, order); order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleB, moduleE, moduleC, moduleA, moduleD }, new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleE, moduleC, moduleA, moduleD }, order); order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleA, moduleD, moduleE, moduleC, moduleB }, new DeploymentOrderOptions()); AssertOrder(new Module[] { moduleB, moduleE, moduleC, moduleA, moduleD }, order); // Tree with null names moduleA = GetModule(null, "C", "A", "B", "D"); moduleB = GetModule(null, "C"); moduleC = GetModule("A"); moduleD = GetModule("B", "A", "C"); moduleE = GetModule("C"); DeploymentOrderOptions options = new DeploymentOrderOptions(); options.IsCheckUses = false; order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleA, moduleB, moduleC, moduleD, moduleE }, options); AssertOrder(new Module[] { moduleC, moduleE, moduleD, moduleA, moduleB }, order); Assert.IsFalse(_deploymentAdmin.IsDeployed("C")); // Tree with duplicate names moduleA = GetModule("A", "C"); moduleB = GetModule("B", "C"); moduleC = GetModule("A", "B"); moduleD = GetModule("D", "A"); moduleE = GetModule("C"); order = _deploymentAdmin.GetDeploymentOrder(new Module[] { moduleA, moduleB, moduleC, moduleD, moduleE }, options); AssertOrder(new Module[] { moduleE, moduleB, moduleA, moduleC, moduleD }, order); }
public TurnConfiguration MakeStatic(Random Random) { return(new TurnConfiguration( Turns, DeploymentOrder.MakeStatic(Random, Turns), TurnOrder.MakeStatic(Random, Turns))); }