public void AssertThat_BaseFloor_CreatesVerticals() { var harness = new ProceduralTestHarness(); var result = harness.Subdivide(new TestRoot( ScriptReference.Find <TestBuildingWithVerticals>().Single(), new Prism(100, new Vector2(0, 0), new Vector2(0, 100), new Vector2(100, 100), new Vector2(100, 0)) )); Assert.IsNotNull(result); var building = result.Root.Children.OfType <BaseTestBuilding>().Single(); var vertical = building.Children.SelectMany(c => c.Children).OfType <IVerticalFeature>().Single(); //Vertical from 1 -> 3 Assert.AreEqual(1, vertical.BottomFloorIndex); Assert.AreEqual(3, vertical.TopFloorIndex); //Did all the floors in the range get informed of this element? Assert.AreEqual(0, ((BlankTestFloor)building.Floor(0)).OverlappingVerticals.Count()); Assert.AreEqual(0, ((BlankTestFloor)building.Floor(1)).OverlappingVerticals.Count()); //Floor 1 placed the element, so it is *not* informed of it this way! Assert.AreEqual(1, ((BlankTestFloor)building.Floor(2)).OverlappingVerticals.Count()); Assert.AreEqual(1, ((BlankTestFloor)building.Floor(3)).OverlappingVerticals.Count()); Assert.AreEqual(0, ((BlankTestFloor)building.Floor(4)).OverlappingVerticals.Count()); //Does vertical container contain vertical for all these floors var vContainer = (IVerticalFeatureContainer)building; Assert.AreEqual(0, vContainer.Overlapping(0).Count()); Assert.AreEqual(1, vContainer.Overlapping(1).Count()); Assert.AreEqual(1, vContainer.Overlapping(2).Count()); Assert.AreEqual(1, vContainer.Overlapping(3).Count()); Assert.AreEqual(0, vContainer.Overlapping(4).Count()); }
public void AssertThat_BaseFloor_CreatesExternalFacades() { var harness = new ProceduralTestHarness(); var result = harness.Subdivide(new TestRoot( ScriptReference.Find <TestBuildingWithSingleFloorWithExternalRoom>().Single(), new Prism(100, new Vector2(0, 0), new Vector2(0, 100), new Vector2(100, 100), new Vector2(100, 0)) )); Assert.IsNotNull(result); var building = result.Root.Children.OfType <BaseTestBuilding>().Single(); var floor = building.Children.OfType <BaseFloor>().Single(); var room = floor.Children.OfType <IPlannedRoom>().Single(); //Check that 4 room facades were created Assert.AreEqual(4, room.Facades.Count); //Check that facades are all in the correct locations foreach (var keyValuePair in room.Facades) { //Check the facades are in the right place Assert.IsTrue(keyValuePair.Value.Section.Matches(keyValuePair.Key.Section)); //Check that the facades subdivide after rooms Assert.IsTrue(((ProceduralScript)keyValuePair.Value.GetDependencyContext()).Prerequisites().Contains((ProceduralScript)room)); } //Check that 2 external facades were created Assert.AreEqual(2, room.Facades.Count(f => f.Key.IsExternal)); }
public void AssertThat_BaseBuilding_CreatesPrerequisiteRelationships() { var harness = new ProceduralTestHarness(); var result = harness.Subdivide(new TestRoot( ScriptReference.Find <TestBuildingWithManyFloors>().Single(), new Prism(100, new Vector2(0, 0), new Vector2(0, 100), new Vector2(100, 100), new Vector2(100, 0)) )); Assert.IsNotNull(result); var building = result.Root.Children.OfType <BaseTestBuilding>().Single(); Assert.IsNotNull(building.Floor(0)); Assert.IsNotNull(building.Floor(-1)); Assert.AreEqual(4, building.AboveGroundFloors); Assert.AreEqual(4, building.BelowGroundFloors); Assert.AreEqual(8, building.TotalFloors); //Check that all above ground floors depend on the floor below var above = building.Children .OfType <BlankTestFloor>() .Where(a => a.FloorIndex >= 0) .OrderBy(a => a.FloorIndex) .ToArray(); for (var i = 1; i < above.Length; i++) { var prereq = above[i].Prerequisites().ToArray(); Assert.IsTrue(prereq.Contains(above[i - 1])); } //Check that all below ground floors depend on the floor above var below = building.Children .OfType <BlankTestFloor>() .Where(a => a.FloorIndex <= 0) .OrderBy(a => - a.FloorIndex) .ToArray(); for (var i = 1; i < below.Length; i++) { var prereq = below[i].Prerequisites().ToArray(); Assert.IsTrue(prereq.Contains(below[i - 1])); } }
public void AssertThat_BaseBuilding_CreatesSelectedFloors_WithAboveGroundFloors() { var harness = new ProceduralTestHarness(); var result = harness.Subdivide(new TestRoot( ScriptReference.Find <TestBuildingWithTwoFloors>().Single(), new Prism(100, new Vector2(0, 0), new Vector2(0, 100), new Vector2(100, 100), new Vector2(100, 0)) )); Assert.IsNotNull(result); var building = result.Root.Children.OfType <BaseTestBuilding>().Single(); Assert.IsNotNull(building.Floor(0)); Assert.IsNotNull(building.Floor(-1)); Assert.AreEqual(1, building.AboveGroundFloors); Assert.AreEqual(1, building.BelowGroundFloors); Assert.AreEqual(2, building.TotalFloors); }
public void AssertThat_BaseFloor_CreatesInternalFacades() { var harness = new ProceduralTestHarness(); var result = harness.Subdivide(new TestRoot( ScriptReference.Find <TestBuildingWithSingleFloorWithInternalRoom>().Single(), new Prism(100, new Vector2(0, 0), new Vector2(0, 100), new Vector2(100, 100), new Vector2(100, 0)) )); Assert.IsNotNull(result); int index = 1; foreach (var dependency in (IEnumerable <ISet <OrderedProcess> >)result.Dependencies()) { Console.WriteLine(index + "."); foreach (var orderedProcess in dependency) { var n = ((OrderedProceduralNode)orderedProcess).Node; var p = n.Parent; Console.WriteLine(" - {0} ({1})", n.GetType().Name, p == null ? "null" : p.GetType().Name); } index++; } var building = result.Root.Children.OfType <BaseTestBuilding>().Single(); var floor = building.Children.OfType <BaseFloor>().Single(); var room = floor.Children.OfType <IPlannedRoom>().Single(); //Check that 4 internal facades were created Assert.AreEqual(4, room.Facades.Count); foreach (var keyValuePair in room.Facades) { //Check the facades are in the right place Assert.IsTrue(keyValuePair.Value.Section.Matches(keyValuePair.Key.Section)); //Check that the facades subdivide after rooms Assert.IsTrue(((ProceduralScript)keyValuePair.Value.GetDependencyContext()).Prerequisites().Contains((ProceduralScript)room)); } }