コード例 #1
0
ファイル: AlchemyTests.cs プロジェクト: Zazcallabah/Alchemist
        public void AlchemyControllerRecommendsEmptyRuleIfDone()
        {
            var rs = new RuleSet();
            var controller = new AlchemyController( rs );
            controller.RegisterNewElement( "fire" );
            var rule = controller.RecommendNewRule();
            controller.ReportChangedRule( rule );

            var finalRule = controller.RecommendNewRule();

            Assert.AreEqual( Rule.EmptyRule, finalRule );
        }
コード例 #2
0
ファイル: AlchemyTests.cs プロジェクト: Zazcallabah/Alchemist
        public void AlchemyControllerRecommendsNullIfNoElements()
        {
            var rs = new RuleSet();
            var controller = new AlchemyController( rs );

            var rule = controller.RecommendNewRule();

            Assert.IsNull( rule );
        }
コード例 #3
0
ファイル: ChemistTests.cs プロジェクト: Zazcallabah/Alchemist
        public void AddExplicitRuleWithNewElementsResetsRecommendedElementProgress()
        {
            var rs = new RuleSet();
            var controller = new AlchemyController( rs );
            var c = Setup( controller, new[] { ">fire", ">water", "", "", "#fire,fire:energy", "!" } );
            c.Cook();

            var rule = controller.RecommendNewRule();

            Assert.AreEqual( new Rule( new[] { "fire", "energy" } ), rule );
        }
コード例 #4
0
        public void RuleSetOnlyNotifiesWhenStrictlyNeccessary()
        {
            var changedprops = new List<string>();
            var persister = new XmlPersister( new RuleSetXmlSerializer(), new StreamFactory( "data.xml" ), 2000 );
            var rs = persister.RecreateRuleSet();
            rs.PropertyChanged += ( s, e ) => changedprops.Add( e.PropertyName );

            var controller = new AlchemyController( rs );

            var rule = controller.RecommendNewRule();
            rule.Result = new[] { new Element( "alpha" ) };
            controller.ReportChangedRule( rule );

            Assert.AreEqual( 1, changedprops.Count( p => p.Equals( "FoundElements" ) ) );
            Assert.AreEqual( 1, changedprops.Count( p => p.Equals( "Rules" ) ) );
        }
コード例 #5
0
        public void RuleSetNotifiesOnPropertyChanged()
        {
            var changedprops = new List<string>();
            var r = new RuleSet();
            r.PropertyChanged += ( s, e ) => changedprops.Add( e.PropertyName );

            var controller = new AlchemyController( r );
            controller.RegisterNewElement( "fire" );
            var rule = controller.RecommendNewRule();
            rule.Result = new[] { new Element( "water" ) };

            controller.ReportChangedRule( rule );

            Assert.AreEqual( 2, changedprops.Count( p => p.Equals( "FoundElements" ) ) );
            Assert.AreEqual( 2, r.FoundElements.Count() );
            Assert.AreEqual( 1, changedprops.Count( p => p.Equals( "Rules" ) ) );
            Assert.AreEqual( 1, r.Rules.Count() );
        }
コード例 #6
0
ファイル: AlchemyTests.cs プロジェクト: Zazcallabah/Alchemist
        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 ) ) ) );
        }
コード例 #7
0
ファイル: AlchemyTests.cs プロジェクト: Zazcallabah/Alchemist
        public void AlchemyControllerRecommendsRule()
        {
            var rs = new RuleSet
            {
                FoundElements = new[] { new Element( "fire" ) }
            };
            var controller = new AlchemyController( rs );

            var rule = controller.RecommendNewRule();

            Assert.IsNotNull( rule );
            Assert.AreEqual( new Rule( new[] { new Element( "fire" ), new Element( "fire" ) } ), rule );
        }
コード例 #8
0
ファイル: AlchemyTests.cs プロジェクト: Zazcallabah/Alchemist
        public void ControllerRecommendsCombinationsButNotDuplicates()
        {
            var rs = new RuleSet();
            var c = new AlchemyController( rs );
            c.RegisterNewElement( "a" );
            c.RegisterNewElement( "mb" );
            c.RegisterNewElement( "aoeu" );
            c.ReportChangedRule( c.RecommendNewRule() );

            var rules = new List<Rule>();
            for( int i = 0; i < 100; i++ )
            {
                var r1 = c.RecommendNewRule();
                if( r1 == Rule.EmptyRule )
                    break;
                rules.Add( r1 );
                c.ReportChangedRule( r1 );
            }

            Assert.AreEqual( 5, rules.Count );
        }
コード例 #9
0
ファイル: AlchemyTests.cs プロジェクト: Zazcallabah/Alchemist
        public void ControllerRecommendsAllPossibleCombinationsOfElements()
        {
            const string e1 = "1";
            const string e2 = "2";
            var rs = new RuleSet();
            var c = new AlchemyController( rs );
            c.RegisterNewElement( e1 );
            c.RegisterNewElement( e2 );
            var rules = new List<Rule>();
            for( int i = 0; i < 100; i++ )
            {
                var r1 = c.RecommendNewRule();
                if( r1 == Rule.EmptyRule )
                    break;
                rules.Add( r1 );
                c.ReportChangedRule( r1 );
            }

            Assert.AreEqual( 3, rules.Count );
            Assert.IsTrue( AssertForCombo( e1, e1, rules ) );
            Assert.IsTrue( AssertForCombo( e1, e2, rules ) );
            Assert.IsTrue( AssertForCombo( e2, e2, rules ) );
        }
コード例 #10
0
ファイル: AlchemyTests.cs プロジェクト: Zazcallabah/Alchemist
        public void CanReportTestedRuleBackToController()
        {
            var rs = new RuleSet();
            var controller = new AlchemyController( rs );
            controller.RegisterNewElement( "fire" );
            var rule = controller.RecommendNewRule();
            rule.Result = new[] { new Element( "water" ) };

            controller.ReportChangedRule( rule );

            Assert.AreEqual( 1, rs.Rules.Count() );
            Assert.AreEqual( 2, rs.FoundElements.Count() );
        }