public void AlchemyControllerCanMarkElementAsTerminal() { var rs = new RuleSet(); var a = new AlchemyController( rs ); a.RegisterNewElement( "a" ); a.RegisterNewElement( "b" ); a.RegisterNewElement( "c" ); a.RegisterNewElement( "d" ); a.RegisterNewElement( "e" ); a.FinalizeElement( "c" ); var em = rs.FoundElements.FirstOrDefault( e => e.Name.Equals( "c" ) ); Assert.IsTrue( em.TerminalSpecified ); Assert.IsTrue( em.TerminalValue.HasValue ); if( em.TerminalValue != null ) { Assert.IsTrue( em.TerminalValue.Value ); } Assert.AreEqual( 1, rs.FoundElements.Count( e => e.TerminalValue.HasValue && e.Terminal ) ); Assert.AreEqual( 4, rs.FoundElements.Count( e => !e.TerminalValue.HasValue ) ); }
public void AlchemyControllerWontReccomendRuleWithTerminalElements() { var rs = new RuleSet(); var a = new AlchemyController( rs ); a.RegisterNewElement( "a" ); a.RegisterNewElement( "b" ); a.RegisterNewElement( "c" ); a.FinalizeElement( "a" ); var rules = new List<Rule>(); for( int i = 0; i < 100; i++ ) { var r1 = a.RecommendNewRule(); if( r1 == Rule.EmptyRule ) break; rules.Add( r1 ); a.ReportChangedRule( r1 ); } Assert.AreEqual( 3, rules.Count ); Assert.IsFalse( rules.Any( r => r.Ingredients.Any( i => i.Name.Equals( a ) ) ) ); }
public Do Run( string input, AlchemyController controller, ICommunicator communicator ) { controller.FinalizeElement( input.TrimStart( '+' ) ); return Do.AnotherRule; }