public void CompositionOfRules_And_Neg() { IRule <BigInteger> rule = MaskRule.Is(EnglishAttributes.O) & !MaskRule.Is(EnglishAttributes.O.NonLexeme); Assert.IsTrue(rule.Evaluate(EnglishAttributes.O.Lexeme)); Assert.IsTrue(rule.Evaluate(EnglishAttributes.O)); Assert.IsFalse(rule.Evaluate(EnglishAttributes.O.NonLexeme)); }
public void IsSubruleOf() { IRule <BigInteger> rule1 = MaskRule.Is(EnglishAttributes.I.Lexeme.Verb); IRule <BigInteger> rule2 = MaskRule.Is(EnglishAttributes.I.Lexeme); Assert.IsTrue(rule1.IsSubruleOf(rule2)); Assert.IsTrue(rule1.IsSubruleOf(rule1)); Assert.IsTrue(rule2.IsSubruleOf(rule2)); Assert.IsFalse(rule2.IsSubruleOf(rule1)); }
public static MorphemeRule Is(IRule <string> morphRule, BigInteger attributes, BigInteger notAttributes) => notAttributes != 0 ? new MorphemeRule(myAttributesModel.GetGrammarCharacter(attributes), morphRule, MaskRule.Is(attributes) & !MaskRule.Is(notAttributes)) : new MorphemeRule(myAttributesModel.GetGrammarCharacter(attributes), morphRule, MaskRule.Is(attributes));
public void IsMatch() { IAttributesModel attributesModel = new EnglishAttributesModel(); // Or MorphemeRule morphemeRule = new MorphemeRule(GrammarCharacter.I, RuleMaker.Anything <string>(), MaskRule.Is(EnglishAttributes.I.Lexeme.Interjection).Or(MaskRule.Is(EnglishAttributes.I.Lexeme.Verb))); Assert.IsTrue(morphemeRule.Evaluate(new Morpheme(attributesModel, "", EnglishAttributes.I.Lexeme.Verb))); Assert.IsTrue(morphemeRule.Evaluate(new Morpheme(attributesModel, "", EnglishAttributes.I.Lexeme.Interjection))); Assert.IsTrue(morphemeRule.Evaluate(new Morpheme(attributesModel, "", EnglishAttributes.I.Lexeme.Verb | EnglishAttributes.I.Lexeme.Interjection))); Assert.IsFalse(morphemeRule.Evaluate(new Morpheme(attributesModel, "", EnglishAttributes.O))); // And morphemeRule = new MorphemeRule(GrammarCharacter.I, RuleMaker.Anything <string>(), MaskRule.Is(EnglishAttributes.I.Lexeme.Interjection).And(MaskRule.Is(EnglishAttributes.I.Lexeme.Verb))); Assert.IsFalse(morphemeRule.Evaluate(new Morpheme(attributesModel, "", EnglishAttributes.I.Lexeme.Verb))); Assert.IsFalse(morphemeRule.Evaluate(new Morpheme(attributesModel, "", EnglishAttributes.I.Lexeme.Interjection))); Assert.IsTrue(morphemeRule.Evaluate(new Morpheme(attributesModel, "", EnglishAttributes.I.Lexeme.Verb | EnglishAttributes.I.Lexeme.Interjection))); Assert.IsFalse(morphemeRule.Evaluate(new Morpheme(attributesModel, "", EnglishAttributes.O))); }
public void CopyConstructor() { var morphemeRule = new MorphemeRule(GrammarCharacter.I, RuleMaker.Anything <string>(), MaskRule.Is(EnglishAttributes.I.Lexeme.Interjection)); morphemeRule.SetSubstitution(SubstitutionRules.Epsilon_U_E); var copy = new MorphemeRule(morphemeRule); Assert.AreEqual(morphemeRule.GrammarCharacter, copy.GrammarCharacter); Assert.IsTrue(morphemeRule.MorphRule.Equals(copy.MorphRule)); Assert.IsTrue(morphemeRule.AttributesRule.Equals(copy.AttributesRule)); Assert.IsTrue(morphemeRule.SubstitutionRule.Equals(copy.SubstitutionRule)); Assert.IsTrue(morphemeRule.Equals(copy)); }