Esempio n. 1
0
		public void MoUnclassifiedAffixMsa_EqualMsa()
		{
			CheckDisposed();

			ILangProject lp = Cache.LangProject;
			ILexDb ld = lp.LexDbOA;
			ILexEntry le = MakeLexEntry(ld, "xyzTest1", "xyzDefn1.1", 0);

			MoUnclassifiedAffixMsa unclassifiedAffixMsa1 = new MoUnclassifiedAffixMsa();
			MoUnclassifiedAffixMsa unclassifiedAffixMsa2 = new MoUnclassifiedAffixMsa();
			MoStemMsa stemMsa = new MoStemMsa();
			MoInflAffMsa inflAffixMsa = new MoInflAffMsa();
			MoDerivAffMsa derivAffixMsa = new MoDerivAffMsa();

			le.MorphoSyntaxAnalysesOC.Add(unclassifiedAffixMsa1);
			le.MorphoSyntaxAnalysesOC.Add(unclassifiedAffixMsa2);
			le.MorphoSyntaxAnalysesOC.Add(stemMsa);
			le.MorphoSyntaxAnalysesOC.Add(inflAffixMsa);
			le.MorphoSyntaxAnalysesOC.Add(derivAffixMsa);

			DummyGenericMSA dummyMsa1 = DummyGenericMSA.Create(unclassifiedAffixMsa1);
			DummyGenericMSA dummyMsa2 = DummyGenericMSA.Create(unclassifiedAffixMsa2);
			DummyGenericMSA dummyMsa3 = DummyGenericMSA.Create(stemMsa);
			DummyGenericMSA dummyMsa4 = DummyGenericMSA.Create(inflAffixMsa);
			DummyGenericMSA dummyMsa5 = DummyGenericMSA.Create(derivAffixMsa);

			// Verify we fail comparing on different MSA types.
			Assert.IsFalse(unclassifiedAffixMsa1.EqualsMsa(stemMsa));
			Assert.IsFalse(unclassifiedAffixMsa1.EqualsMsa(inflAffixMsa));
			Assert.IsFalse(unclassifiedAffixMsa1.EqualsMsa(derivAffixMsa));
			Assert.IsFalse(unclassifiedAffixMsa1.EqualsMsa(dummyMsa3));
			Assert.IsFalse(unclassifiedAffixMsa1.EqualsMsa(dummyMsa4));
			Assert.IsFalse(unclassifiedAffixMsa1.EqualsMsa(dummyMsa5));

			// Verify that unclassifiedAffixMsa1 equals itself.
			Assert.IsTrue(unclassifiedAffixMsa1.EqualsMsa(unclassifiedAffixMsa1), unclassifiedAffixMsa1.ToString() + " - should equal itself.");

			// Verify that unclassifiedAffixMsa1 equals unclassifiedAffixMsa2
			Assert.IsTrue(unclassifiedAffixMsa1.EqualsMsa(unclassifiedAffixMsa2), unclassifiedAffixMsa1.ToString() + " - should equal - " + unclassifiedAffixMsa2.ToString());
			Assert.IsTrue(unclassifiedAffixMsa1.EqualsMsa(dummyMsa2), "unclassifiedAffixMsa1 should equal dummyMsa2");

			// compare with on different PartOfSpeech
			FdoOwningSequence<ICmPossibility> posSeq = lp.PartsOfSpeechOA.PossibilitiesOS;
			IPartOfSpeech pos1 = (IPartOfSpeech)posSeq.Append(new PartOfSpeech());
			IPartOfSpeech pos2 = (IPartOfSpeech)posSeq.Append(new PartOfSpeech());

			unclassifiedAffixMsa1.PartOfSpeechRA = pos1;
			unclassifiedAffixMsa2.PartOfSpeechRA = pos2;
			dummyMsa2.MainPOS = pos2.Hvo;
			Assert.IsTrue(unclassifiedAffixMsa1.PartOfSpeechRA != unclassifiedAffixMsa2.PartOfSpeechRA, "msa POSes should not be equal.");
			Assert.IsFalse(unclassifiedAffixMsa1.EqualsMsa(unclassifiedAffixMsa2), "unclassifiedAffixMsa1 should not be equal to unclassifiedAffixMsa2 due to different POS");
			Assert.IsFalse(unclassifiedAffixMsa1.EqualsMsa(dummyMsa2), "unclassifiedAffixMsa1 should not equal dummyMsa2");

			// reset POS
			unclassifiedAffixMsa1.PartOfSpeechRAHvo = unclassifiedAffixMsa2.PartOfSpeechRAHvo;
			dummyMsa2.MainPOS = unclassifiedAffixMsa1.PartOfSpeechRAHvo;
			Assert.IsTrue(unclassifiedAffixMsa1.EqualsMsa(unclassifiedAffixMsa2), "unclassifiedAffixMsa1 & unclassifiedAffixMsa2 should be equal with matching POS");
			Assert.IsTrue(unclassifiedAffixMsa1.EqualsMsa(dummyMsa2), "unclassifiedAffixMsa1 should equal dummyMsa2");
		}
Esempio n. 2
0
		public void MoDerivAffMsa_EqualMsa()
		{
			CheckDisposed();

			CreateTestData();

			ILangProject lp = Cache.LangProject;
			ILexDb ld = lp.LexDbOA;
			ILexEntry le = MakeLexEntry(ld, "xyzTest1", "xyzDefn1.1", 0);

			MoDerivAffMsa derivAffixMsa1 = new MoDerivAffMsa();
			MoDerivAffMsa derivAffixMsa2 = new MoDerivAffMsa();
			MoStemMsa stemMsa = new MoStemMsa();
			MoInflAffMsa inflAffixMsa = new MoInflAffMsa();
			MoUnclassifiedAffixMsa unclassifiedAffixMsa = new MoUnclassifiedAffixMsa();

			le.MorphoSyntaxAnalysesOC.Add(derivAffixMsa1);
			le.MorphoSyntaxAnalysesOC.Add(derivAffixMsa2);
			le.MorphoSyntaxAnalysesOC.Add(stemMsa);
			le.MorphoSyntaxAnalysesOC.Add(inflAffixMsa);
			le.MorphoSyntaxAnalysesOC.Add(unclassifiedAffixMsa);

			DummyGenericMSA dummyMsa1 = DummyGenericMSA.Create(derivAffixMsa1);
			DummyGenericMSA dummyMsa2 = DummyGenericMSA.Create(derivAffixMsa2);
			DummyGenericMSA dummyMsa3 = DummyGenericMSA.Create(stemMsa);
			DummyGenericMSA dummyMsa4 = DummyGenericMSA.Create(inflAffixMsa);
			DummyGenericMSA dummyMsa5 = DummyGenericMSA.Create(unclassifiedAffixMsa);

			// Verify we fail comparing on different MSA types.
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(stemMsa));
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(inflAffixMsa));
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(unclassifiedAffixMsa));
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(dummyMsa3));
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(dummyMsa4));
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(dummyMsa5));

			// Verify that derivAffixMsa1 equals itself.
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(derivAffixMsa1), derivAffixMsa1.ToString() + " - should equal itself.");

			// Verify that derivAffixMsa1 equals derivAffixMsa2
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(derivAffixMsa2), derivAffixMsa1.ToString() + " - should equal - " + derivAffixMsa2.ToString());
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(dummyMsa2), "derivAffixMsa1 should equal dummyMsa2");

			// compare with on different FromPartOfSpeech
			FdoOwningSequence<ICmPossibility> posSeq = lp.PartsOfSpeechOA.PossibilitiesOS;
			IPartOfSpeech pos1 = (IPartOfSpeech)posSeq.Append(new PartOfSpeech());
			IPartOfSpeech pos2 = (IPartOfSpeech)posSeq.Append(new PartOfSpeech());
			derivAffixMsa1.FromPartOfSpeechRA = pos1;
			derivAffixMsa2.FromPartOfSpeechRA = pos2;
			dummyMsa2.MainPOS = pos2.Hvo;
			Assert.IsTrue(derivAffixMsa1.FromPartOfSpeechRA != derivAffixMsa2.FromPartOfSpeechRA, "msa POSes should not be equal.");
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 should not be equal to derivAffixMsa2 due to different FromPartOfSpeech");
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(dummyMsa2), "derivAffixMsa1 should not equal dummyMsa2");

			// reset POS
			derivAffixMsa1.FromPartOfSpeechRAHvo = derivAffixMsa2.FromPartOfSpeechRAHvo;
			dummyMsa2.MainPOS = derivAffixMsa1.FromPartOfSpeechRAHvo;
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 & derivAffixMsa2 should be equal with matching POS");
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(dummyMsa2), "derivAffixMsa1 should equal dummyMsa2");

			// compare with on different ToPartOfSpeech
			PartOfSpeech pos3 = (PartOfSpeech)posSeq.Append(new PartOfSpeech());
			PartOfSpeech pos4 = (PartOfSpeech)posSeq.Append(new PartOfSpeech());
			derivAffixMsa1.ToPartOfSpeechRA = pos3;
			derivAffixMsa2.ToPartOfSpeechRA = pos4;
			dummyMsa2.SecondaryPOS = pos4.Hvo;
			Assert.IsTrue(derivAffixMsa1.ToPartOfSpeechRA != derivAffixMsa2.ToPartOfSpeechRA, "msa POSes should not be equal.");
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 should not be equal to derivAffixMsa2 due to different ToPartOfSpeech");
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(dummyMsa2), "derivAffixMsa1 should not equal dummyMsa2");

			// reset POS
			derivAffixMsa1.ToPartOfSpeechRAHvo = derivAffixMsa2.ToPartOfSpeechRAHvo;
			dummyMsa2.SecondaryPOS = derivAffixMsa1.ToPartOfSpeechRAHvo;
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 & derivAffixMsa2 should be equal with matching POS");
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(dummyMsa2), "derivAffixMsa1 should equal dummyMsa2");

			// compare on different FromInflectionClass
			pos1.InflectionClassesOC.Add(new MoInflClass());
			pos2.InflectionClassesOC.Add(new MoInflClass());
			derivAffixMsa1.FromInflectionClassRAHvo = pos1.InflectionClassesOC.HvoArray[0];
			derivAffixMsa2.FromInflectionClassRAHvo = pos2.InflectionClassesOC.HvoArray[0];
			Assert.IsTrue(derivAffixMsa1.FromInflectionClassRA != derivAffixMsa2.FromInflectionClassRA, "inflection classes should not be equal.");
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 should not be equal to derivAffixMsa2 due to different inflection classes.");

			// reset InflectionClass
			derivAffixMsa1.FromInflectionClassRA = derivAffixMsa2.FromInflectionClassRA;
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 & derivAffixMsa2 should be equal with matching inflection classes");

			// compare on different FromStemName
			pos1.StemNamesOC.Add(new MoStemName());
			pos2.StemNamesOC.Add(new MoStemName());
			derivAffixMsa1.FromStemNameRAHvo = pos1.StemNamesOC.HvoArray[0];
			derivAffixMsa2.FromStemNameRAHvo = pos2.StemNamesOC.HvoArray[0];
			Assert.IsTrue(derivAffixMsa1.FromStemNameRA != derivAffixMsa2.FromStemNameRA, "stem names should not be equal.");
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 should not be equal to derivAffixMsa2 due to different stem names.");

			// reset StemName
			derivAffixMsa1.FromStemNameRA = derivAffixMsa2.FromStemNameRA;
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 & derivAffixMsa2 should be equal with matching stem names");

			// compare on different ToInflectionClass
			pos3.InflectionClassesOC.Add(new MoInflClass());
			pos4.InflectionClassesOC.Add(new MoInflClass());
			derivAffixMsa1.ToInflectionClassRAHvo = pos3.InflectionClassesOC.HvoArray[0];
			derivAffixMsa2.ToInflectionClassRAHvo = pos4.InflectionClassesOC.HvoArray[0];
			Assert.IsTrue(derivAffixMsa1.ToInflectionClassRA != derivAffixMsa2.ToInflectionClassRA, "inflection classes should not be equal.");
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 should not be equal to derivAffixMsa2 due to different inflection classes.");

			// reset InflectionClass
			derivAffixMsa1.ToInflectionClassRA = derivAffixMsa2.ToInflectionClassRA;
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 & derivAffixMsa2 should be equal with matching inflection classes");

			// compare different FromProdRestrict
			ICmPossibility pr1 = lp.MorphologicalDataOA.ProdRestrictOA.PossibilitiesOS[0];
			ICmPossibility pr2 = lp.MorphologicalDataOA.ProdRestrictOA.PossibilitiesOS[1];

			derivAffixMsa1.FromProdRestrictRC.Add(pr1.Hvo);
			derivAffixMsa2.FromProdRestrictRC.Add(pr2.Hvo);
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 should not be equal to derivAffixMsa2 due to productivity restrictions differences.");

			derivAffixMsa1.FromProdRestrictRC.Add(pr2.Hvo);
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 should not be equal to derivAffixMsa2 due to productivity restrictions count difference.");

			// Match Productivity Restrictions
			derivAffixMsa2.FromProdRestrictRC.Add(pr1.Hvo);
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 & derivAffixMsa2 should be equal with matching productivity restrictions");

			// compare different ToProdRestrict
			CmPossibility pr3 = lp.MorphologicalDataOA.ProdRestrictOA.PossibilitiesOS[2] as CmPossibility;
			CmPossibility pr4 = lp.MorphologicalDataOA.ProdRestrictOA.PossibilitiesOS[3] as CmPossibility;

			derivAffixMsa1.ToProdRestrictRC.Add(pr3.Hvo);
			derivAffixMsa2.ToProdRestrictRC.Add(pr4.Hvo);
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 should not be equal to derivAffixMsa2 due to productivity restrictions differences.");

			derivAffixMsa1.ToProdRestrictRC.Add(pr4.Hvo);
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 should not be equal to derivAffixMsa2 due to productivity restrictions count difference.");

			// Match Productivity Restrictions
			derivAffixMsa2.ToProdRestrictRC.Add(pr3.Hvo);
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 & derivAffixMsa2 should be equal with matching productivity restrictions");

			// compare different FromMsFeatures
			XmlDocument doc = new XmlDocument();
			doc.LoadXml(m_ksFS1);
			XmlNode itemNeut = doc.SelectSingleNode("/item/item[3]");
			XmlNode itemFem = doc.SelectSingleNode("/item/item[2]");
			derivAffixMsa1.FromMsFeaturesOA = new FsFeatStruc();
			derivAffixMsa2.FromMsFeaturesOA = new FsFeatStruc();
			derivAffixMsa1.FromMsFeaturesOA.AddFeatureFromXml(Cache, itemNeut);
			derivAffixMsa2.FromMsFeaturesOA.AddFeatureFromXml(Cache, itemFem);

			Assert.IsFalse(derivAffixMsa1.FromMsFeaturesOA.IsEquivalent(derivAffixMsa2.FromMsFeaturesOA), "FromMsFeaturesOA should not be equal.");
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 should not be equal to derivAffixMsa2 due to different FromMsFeaturesOA.");

			// match feature structures
			derivAffixMsa1.FromMsFeaturesOA.AddFeatureFromXml(Cache, itemFem);
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 & derivAffixMsa2 should be equal with matching feature structure");

			// compare different ToMsFeatures
			derivAffixMsa1.ToMsFeaturesOA = new FsFeatStruc();
			derivAffixMsa2.ToMsFeaturesOA = new FsFeatStruc();
			derivAffixMsa1.ToMsFeaturesOA.AddFeatureFromXml(Cache, itemFem);
			derivAffixMsa2.ToMsFeaturesOA.AddFeatureFromXml(Cache, itemNeut);

			Assert.IsFalse(derivAffixMsa1.ToMsFeaturesOA.IsEquivalent(derivAffixMsa2.ToMsFeaturesOA), "ToMsFeaturesOA should not be equal.");
			Assert.IsFalse(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 should not be equal to derivAffixMsa2 due to different ToMsFeaturesOA.");

			// match feature structures
			derivAffixMsa1.ToMsFeaturesOA.AddFeatureFromXml(Cache, itemNeut);
			Assert.IsTrue(derivAffixMsa1.EqualsMsa(derivAffixMsa2), "derivAffixMsa1 & derivAffixMsa2 should be equal with matching feature structure");
		}
Esempio n. 3
0
		///<summary>
		/// Copies attributes associated with the current "To" POS, such as inflection features and classes, that
		/// are valid from the specified MSA to this MSA. If the attribute is not valid, it is removed from
		/// this MSA.
		///</summary>
		///<param name="srcMsa">the source MSA</param>
		public void CopyFromAttributesIfValid(MoDerivAffMsa srcMsa)
		{
			// inflection classes
			if (IsReferenceAttributeValid(srcMsa.FromInflectionClassRAHvo, (int)MoDerivAffMsaTags.kflidFromInflectionClass))
			{
				if (srcMsa.FromInflectionClassRAHvo != FromInflectionClassRAHvo)
					FromInflectionClassRAHvo = srcMsa.FromInflectionClassRAHvo;
			}
			else if (FromInflectionClassRAHvo != 0)
			{
				FromInflectionClassRAHvo = 0;
			}

			// inflection features
			if (srcMsa.FromMsFeaturesOAHvo == 0)
			{
				FromMsFeaturesOA = null;
			}
			else
			{
				if (FromMsFeaturesOAHvo != srcMsa.FromMsFeaturesOAHvo)
					m_cache.CopyObject(srcMsa.FromMsFeaturesOAHvo, m_hvo, (int)MoDerivAffMsaTags.kflidFromMsFeatures);
				RemoveInvalidFeatureSpecs(FromPartOfSpeechRA, FromMsFeaturesOA);
				if (FromMsFeaturesOA.IsEmpty)
					FromMsFeaturesOA = null;
			}

			// stem names
			if (IsReferenceAttributeValid(srcMsa.FromStemNameRAHvo, (int)MoDerivAffMsaTags.kflidFromStemName))
			{
				if (srcMsa.FromStemNameRAHvo != FromStemNameRAHvo)
					FromStemNameRAHvo = srcMsa.FromStemNameRAHvo;
			}
			else if (FromStemNameRAHvo != 0)
			{
				FromStemNameRAHvo = 0;
			}
		}
Esempio n. 4
0
		public void MoInflAffMsa_EqualMsa()
		{
			CheckDisposed();

			CreateTestData();

			ILangProject lp = Cache.LangProject;
			ILexDb ld = lp.LexDbOA;
			ILexEntry le = MakeLexEntry(ld, "xyzTest1", "xyzDefn1.1", 0);

			MoInflAffMsa infAffixMsa1 = new MoInflAffMsa();
			MoInflAffMsa infAffixMsa2 = new MoInflAffMsa();
			MoStemMsa stemMsa = new MoStemMsa();
			MoDerivAffMsa derivAffixMsa = new MoDerivAffMsa();
			MoUnclassifiedAffixMsa unclassifiedAffixMsa = new MoUnclassifiedAffixMsa();

			le.MorphoSyntaxAnalysesOC.Add(infAffixMsa1);
			le.MorphoSyntaxAnalysesOC.Add(infAffixMsa2);
			le.MorphoSyntaxAnalysesOC.Add(stemMsa);
			le.MorphoSyntaxAnalysesOC.Add(derivAffixMsa);
			le.MorphoSyntaxAnalysesOC.Add(unclassifiedAffixMsa);

			DummyGenericMSA dummyMsa1 = DummyGenericMSA.Create(infAffixMsa1);
			DummyGenericMSA dummyMsa2 = DummyGenericMSA.Create(infAffixMsa2);
			DummyGenericMSA dummyMsa3 = DummyGenericMSA.Create(stemMsa);
			DummyGenericMSA dummyMsa4 = DummyGenericMSA.Create(derivAffixMsa);
			DummyGenericMSA dummyMsa5 = DummyGenericMSA.Create(unclassifiedAffixMsa);

			// Verify we fail comparing on different MSA types.
			Assert.IsFalse(infAffixMsa1.EqualsMsa(stemMsa));
			Assert.IsFalse(infAffixMsa1.EqualsMsa(derivAffixMsa));
			Assert.IsFalse(infAffixMsa1.EqualsMsa(unclassifiedAffixMsa));
			Assert.IsFalse(infAffixMsa1.EqualsMsa(dummyMsa3));
			Assert.IsFalse(infAffixMsa1.EqualsMsa(dummyMsa4));
			Assert.IsFalse(infAffixMsa1.EqualsMsa(dummyMsa5));

			// Verify that infAffixMsa1 equals itself.
			Assert.IsTrue(infAffixMsa1.EqualsMsa(infAffixMsa1), infAffixMsa1.ToString() + " - should equal itself.");

			// Verify that infAffixMsa1 equals infAffixMsa2
			Assert.IsTrue(infAffixMsa1.EqualsMsa(infAffixMsa2), infAffixMsa1.ToString() + " - should equal - " + infAffixMsa2.ToString());
			Assert.IsTrue(infAffixMsa1.EqualsMsa(dummyMsa2), "infAffixMsa1 should equal dummyMsa2");

			// compare with on different PartOfSpeech
			FdoOwningSequence<ICmPossibility> posSeq = lp.PartsOfSpeechOA.PossibilitiesOS;
			IPartOfSpeech pos1 = (IPartOfSpeech)posSeq.Append(new PartOfSpeech());
			IPartOfSpeech pos2 = (IPartOfSpeech)posSeq.Append(new PartOfSpeech());

			infAffixMsa1.PartOfSpeechRA = pos1;
			infAffixMsa2.PartOfSpeechRA = pos2;
			dummyMsa2.MainPOS = pos2.Hvo;
			Assert.IsTrue(infAffixMsa1.PartOfSpeechRA != infAffixMsa2.PartOfSpeechRA, "msa POSes should not be equal.");
			Assert.IsFalse(infAffixMsa1.EqualsMsa(infAffixMsa2), "infAffixMsa1 should not be equal to infAffixMsa2 due to different POS");
			Assert.IsFalse(infAffixMsa1.EqualsMsa(dummyMsa2), "infAffixMsa1 should not equal dummyMsa2");

			// reset POS
			infAffixMsa1.PartOfSpeechRAHvo = infAffixMsa2.PartOfSpeechRAHvo;
			dummyMsa2.MainPOS = infAffixMsa1.PartOfSpeechRAHvo;
			Assert.IsTrue(infAffixMsa1.EqualsMsa(infAffixMsa2), "infAffixMsa1 & infAffixMsa2 should be equal with matching POS");
			Assert.IsTrue(infAffixMsa1.EqualsMsa(dummyMsa2), "infAffixMsa1 should equal dummyMsa2");

			// skip AffixCategory

			// compare different Slots
			pos1.AffixSlotsOC.Add(new MoInflAffixSlot());
			pos1.AffixSlotsOC.Add(new MoInflAffixSlot());

			infAffixMsa1.SlotsRC.Add(pos1.AffixSlotsOC.HvoArray[0]);
			infAffixMsa2.SlotsRC.Add(pos1.AffixSlotsOC.HvoArray[1]);
			dummyMsa2.Slot = pos1.AffixSlotsOC.HvoArray[1];
			Assert.IsFalse(infAffixMsa1.EqualsMsa(infAffixMsa2), "infAffixMsa1 should not be equal to infAffixMsa2 due to affix slots differences.");
			Assert.IsFalse(infAffixMsa1.EqualsMsa(dummyMsa2), "infAffixMsa1 should not equal dummyMsa2");

			infAffixMsa1.SlotsRC.Add(pos1.AffixSlotsOC.HvoArray[1]);
			Assert.IsTrue(infAffixMsa1.SlotsRC.Count != infAffixMsa2.SlotsRC.Count);
			Assert.IsFalse(infAffixMsa1.EqualsMsa(infAffixMsa2), "infAffixMsa1 should not be equal to infAffixMsa2 due to affix slots Count differences.");
			Assert.IsFalse(infAffixMsa1.EqualsMsa(dummyMsa2), "infAffixMsa1 should not equal dummyMsa2");

			infAffixMsa2.SlotsRC.Add(pos1.AffixSlotsOC.HvoArray[0]);
			Assert.IsTrue(infAffixMsa1.EqualsMsa(infAffixMsa2), "infAffixMsa1 should equal infAffixMsa2 due to affix slots matching.");

			// compare different FromProdRestrict
			ICmPossibility pr1 = lp.MorphologicalDataOA.ProdRestrictOA.PossibilitiesOS[0];
			ICmPossibility pr2 = lp.MorphologicalDataOA.ProdRestrictOA.PossibilitiesOS[1];

			infAffixMsa1.FromProdRestrictRC.Add(pr1.Hvo);
			infAffixMsa2.FromProdRestrictRC.Add(pr2.Hvo);
			Assert.IsFalse(infAffixMsa1.EqualsMsa(infAffixMsa2), "infAffixMsa1 should not be equal to infAffixMsa2 due to productivity restrictions differences.");

			infAffixMsa1.FromProdRestrictRC.Add(pr2.Hvo);
			Assert.IsFalse(infAffixMsa1.EqualsMsa(infAffixMsa2), "infAffixMsa1 should not be equal to infAffixMsa2 due to productivity restrictions count difference.");

			// Match Productivity Restrictions
			infAffixMsa2.FromProdRestrictRC.Add(pr1.Hvo);
			Assert.IsTrue(infAffixMsa1.EqualsMsa(infAffixMsa2), "infAffixMsa1 & infAffixMsa2 should be equal with matching productivity restrictions");

			// compare different InflFeats
			XmlDocument doc = new XmlDocument();
			doc.LoadXml(m_ksFS1);
			XmlNode itemNeut = doc.SelectSingleNode("/item/item[3]");
			XmlNode itemFem = doc.SelectSingleNode("/item/item[2]");
			infAffixMsa1.InflFeatsOA = new FsFeatStruc();
			infAffixMsa2.InflFeatsOA = new FsFeatStruc();
			infAffixMsa1.InflFeatsOA.AddFeatureFromXml(Cache, itemNeut);
			infAffixMsa2.InflFeatsOA.AddFeatureFromXml(Cache, itemFem);

			Assert.IsFalse(infAffixMsa1.InflFeatsOA.IsEquivalent(infAffixMsa2.InflFeatsOA), "InflFeatsOA should not be equal.");
			Assert.IsFalse(infAffixMsa1.EqualsMsa(infAffixMsa2), "infAffixMsa1 should not be equal to infAffixMsa2 due to different InflFeatsOA.");

			// match feature structures
			infAffixMsa1.InflFeatsOA.AddFeatureFromXml(Cache, itemFem);
			Assert.IsTrue(infAffixMsa1.EqualsMsa(infAffixMsa2), "infAffixMsa1 & infAffixMsa2 should be equal with matching feature structure");
		}
Esempio n. 5
0
		// TODO RandyR: Add ShortNameTSS and DeletionTextTSS.
		// NOTE: Don't override ShortName here, as the superclass override will do it right.

		///<summary>
		/// Copies attributes associated with the current "From" POS, such as inflection features and classes, that
		/// are valid from the specified MSA to this MSA. If the attribute is not valid, it is removed from
		/// this MSA.
		///</summary>
		///<param name="srcMsa">the source MSA</param>
		public void CopyToAttributesIfValid(MoDerivAffMsa srcMsa)
		{
			// inflection classes
			if (IsReferenceAttributeValid(srcMsa.ToInflectionClassRAHvo, (int)MoDerivAffMsaTags.kflidToInflectionClass))
			{
				if (srcMsa.ToInflectionClassRAHvo != ToInflectionClassRAHvo)
					ToInflectionClassRAHvo = srcMsa.ToInflectionClassRAHvo;
			}
			else if (ToInflectionClassRAHvo != 0)
			{
				ToInflectionClassRAHvo = 0;
			}

			// inflection features
			if (srcMsa.ToMsFeaturesOAHvo == 0)
			{
				ToMsFeaturesOA = null;
			}
			else
			{
				if (ToMsFeaturesOAHvo != srcMsa.ToMsFeaturesOAHvo)
					m_cache.CopyObject(srcMsa.ToMsFeaturesOAHvo, m_hvo, (int)MoDerivAffMsaTags.kflidToMsFeatures);
				RemoveInvalidFeatureSpecs(ToPartOfSpeechRA, ToMsFeaturesOA);
				if (ToMsFeaturesOA.IsEmpty)
					ToMsFeaturesOA = null;
			}
		}