public void CrawlDeadCycle() { // 0 -> 2 - 3 // | \ / // 1 4 var builder = new ZeldaDungeonBuilder(); builder.AddUndirectedTransition(0, 1, IdentityScript.Default); builder.AddUndirectedTransition(2, 3, IdentityScript.Default); builder.AddUndirectedTransition(3, 4, IdentityScript.Default); builder.AddUndirectedTransition(4, 2, IdentityScript.Default); builder.AddDirectedTransition(0, 2, IdentityScript.Default); var puzzle = builder.Build(); var initialState = emptyVariables.ToState(builder.Lookup); puzzle.Crawl(new[] { initialState }, maxSteps); Assert.NotNull(puzzle.DebugGetStep(0, initialState)); Assert.NotNull(puzzle.DebugGetStep(1, initialState)); Assert.NotNull(puzzle.DebugGetStep(2, initialState)); Assert.NotNull(puzzle.DebugGetStep(3, initialState)); Assert.NotNull(puzzle.DebugGetStep(4, initialState)); Assert.True(puzzle.DebugGetStep(0, initialState).HasDistanceFromExit); Assert.False(puzzle.DebugGetStep(2, initialState).HasDistanceFromExit); Assert.False(puzzle.DebugGetStep(3, initialState).HasDistanceFromExit); Assert.False(puzzle.DebugGetStep(4, initialState).HasDistanceFromExit); }
public void CrawlDeadEnd() { // 0 -> 3 // \ // 2 - 1 var builder = new ZeldaDungeonBuilder(); builder.AddUndirectedTransition(0, 2, IdentityScript.Default); builder.AddUndirectedTransition(2, 1, IdentityScript.Default); builder.AddDirectedTransition(0, 3, IdentityScript.Default); var crawler = builder.Build(); var initialState = emptyVariables.ToState(builder.Lookup); crawler.Crawl(new[] { initialState }, maxSteps); Assert.NotNull(crawler.DebugGetStep(0, initialState)); Assert.NotNull(crawler.DebugGetStep(1, initialState)); Assert.NotNull(crawler.DebugGetStep(2, initialState)); Assert.NotNull(crawler.DebugGetStep(3, initialState)); Assert.IsEmpty(crawler.DebugGetStep(3, initialState).Successors); Assert.False(crawler.DebugGetStep(3, initialState).HasDistanceFromExit); }
public override void Express(ZeldaDungeonBuilder builder) { builder.AddDirectedTransition(wayStart, wayEnd, IdentityScript.Default); }