Beispiel #1
0
        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 ) );
        }
Beispiel #2
0
        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;
        }